Razor视图表单中的多个提交按钮

时间:2012-01-20 16:47:08

标签: html asp.net-mvc asp.net-mvc-3 razor

我有一个带有BeginForm命令的剃刀视图和一个循环,我在其中创建一个html表,每一行都有一个提交按钮。我的问题是,当我将特定行的表单提交回控制器时,如何确保我知道该按钮与哪个行相关?

谢谢,

萨钦

3 个答案:

答案 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。这也很好用,非常简单。