我有一个带有BeginForm命令的剃刀视图和一个循环,我在其中创建一个html表,每一行都有一个提交按钮。我的问题是,当我将特定行的表单提交回控制器时,如何确保我知道该按钮与哪个行相关?
谢谢,
萨钦
答案 0 :(得分:2)
我的想法是在通过javascript函数提交表单之前设置隐藏的输入。
如果你使用jquery,它可能是这样的:
$("input:submit").click(function() {
$("hiddenInput").val(
$(this).closest("input[name*='yourPrimaryKey']").val()
);
});
它找到包含单击其按钮的行ID的输入值。
答案 1 :(得分:2)
在循环中,只需为提交按钮指定一个名称(例如submittedButton),并将其值设置为行标识。
@using(Html.BeginForm())
{
foreach(var row in myRows)
{
<input type="submit" name="submittedButton" value="@row.ID" />
}
}
在你的控制器中定义一个字符串参数,它的名称与提交按钮的名称(在这个例子中为submittedButton)相同,如下所示:
[HttpPost]
public ActionResult YourController(string submittedButton)
{
// submittedButton contains ID of selected row
return View();
}
答案 2 :(得分:0)
我使用了来自mkozicki的这个解决方案,这很好,因为它不受本地化问题的影响(其他一些方法依赖于按钮的值,这可能会因本地化而改变)。 How do you handle multiple submit buttons in ASP.NET MVC Framework?
编辑:如果我在表格中显示数据并且只想知道我选择了哪一行,我会经常为每一行创建一个HTML表单。换句话说,Ajax.BeginForm
里面有foreach
块,然后每个表单都可以包含在回发时传递给控制器的ID。这也很好用,非常简单。