MVC 窗体上的多个按钮 - 在操作控制器中获取项 ID

本文关键字:操作控制器 获取 ID 按钮 窗体 MVC | 更新日期: 2023-09-27 18:34:02

我有一个带有项目列表的视图。每个项目都有一个文本框和一个按钮。获取在控制器操作中单击的按钮的项目 ID 的最佳方法是什么?我需要控制器操作中关联文本框中的值,因此我认为我无法使用操作链接。

MVC 窗体上的多个按钮 - 在操作控制器中获取项 ID

有许多方法可以做到这一点。 有些使用javascript,有些则不使用。 我个人更喜欢不使用javascript来实现基本功能,除非你的设计本身是基于javascript的(例如使用ajax)

例如,您可以让每个项目包装在自己的表单中,具有不同的提交值。 只是要注意不要嵌套表单,因为这不是有效的 HTML。

例如:

@using(Html.BeginForm("MyAction", "MyController", new { id=1 })) {
    <input type="submit"/>
    @Html.TextBox("TheValue", "One")
}
@using(Html.BeginForm("MyAction", "MyController", new { id=2 })) {
    <input type="submit"/>
    @Html.TextBox("TheValue", "Two")
}
public ActionResult MyAction(int? id, string TheValue) {
     // if they click the first one, id is 1, TheValue = "One"
     // if they click the second one, id is 2, TheValue = "Two"
}

这个答案是使用jQuery - 如果您不知道如何将jQuery添加到您的视图中,或者只是不想使用它,请告诉我,我可以重新处理答案

我会做这样的事情

<li>
   <input type="text" id="1" name="1" class="whatever" />
   <input type="button" value="CliCk mE" class="myButton" />
</li>
<li>
   <input type="text" id="2" name="2" class="whatever" />
   <input type="button" value="CliCk mE" class="myButton" />
</li>
<input type="hidden" id="myHiddenText" name="myHiddenText" />

然后添加此 jQuery:

<script>
$(function(){
   $('.myButton').click(function(){
       // this is how to get the closest textbox
       // you didn't show your html , maybe .prev() or .next()
       var textValue = $(this).closest("input[type='text']").val();
       // this sets your hidden field with the value from desired textbox
       $('#myHiddenText').val(textValue);
    });
});
</script>

现在,当您将此表单提交到服务器时,您只需在服务器上使用myHiddenText即可

    public ActionResult Index(string myHiddenText = "")
    {
        // hidden fields in the HTML form automatically get passed to server on submit
        return View();
    }

最好的选择是使用 jquery,但如果你只想使用 c#,我会建议如下:

我想您正在使用某种重复语句(for或foreach)来生成文本框,所以我要做的是在内部创建一个表单,该表单将包含您的文本框,并且对于每个项目,您将文本框ID传递给表单提交。

像这样的伪代码:

foreach(item in array){
  <form action="address/"@item.Id>
    <input type="text" value=""/>
    <input type="submit" value="submit textbox"/>
  </>
}