是否有一些简单的方法能够处理来自同一表单的多个提交按钮? 例: app
<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %> <input type="submit" value="Send" /> <input type="submit" value="Cancel" /> <% Html.EndForm(); %>
任何想法如何在ASP.NET Framework Beta中执行此操做? 我搜索过的全部示例中都包含一个按钮。 ide
大卫·芬德利(David Findley)在他的ASP.Net Weblog上撰写了有关执行此操做的三种不一样选择的信息。 spa
阅读本文中具备相同形式的多个按钮,以查看他的解决方案以及每种解决方案的优缺点。 恕我直言,他提供了一种很是优雅的解决方案,该方案利用了装饰动做的属性。 code
对于每一个提交按钮,只需添加: orm
$('#btnSelector').click(function () { $('form').attr('action', "/Your/Action/); $('form').submit(); });
我试图对全部解决方案进行综合,并建立了一个[ButtenHandler]属性,该属性使处理表单上的多个按钮变得容易。 blog
我已经在ASP.NET MVC中的 CodeProject 多个参数化(可本地化)表单按钮上对其进行了描述。 索引
要处理此按钮的简单状况: ip
<button type="submit" name="AddDepartment">Add Department</button>
您将拥有相似如下操做方法的内容: element
[ButtonHandler()] public ActionResult AddDepartment(Company model) { model.Departments.Add(new Department()); return View(model); }
请注意,按钮的名称如何与操做方法的名称匹配。 本文还介绍了如何具备带有值的按钮和带有索引的按钮。 get
我没有足够的表明在正确的位置发表评论,但我成天都在此发表评论,因此想分享。
尝试实现“ MultipleButtonAttribute”解决方案时, ValueProvider.GetValue(keyValue)
将错误地返回null
。
原来,当我应该将System.Web.MVC版本3.0设置为4.0时(其余程序集是4.0)。 我不知道为何个人项目没法正确升级,而且我没有其余明显的问题。
所以,若是您的ActionNameSelectorAttribute
不起做用,请检查。
//model public class input_element { public string Btn { get; set; } } //views--submit btn can be input type also... @using (Html.BeginForm()) { <button type="submit" name="btn" value="verify"> Verify data</button> <button type="submit" name="btn" value="save"> Save data</button> <button type="submit" name="btn" value="redirect"> Redirect</button> } //controller public ActionResult About() { ViewBag.Message = "Your app description page."; return View(); } [HttpPost] public ActionResult About(input_element model) { if (model.Btn == "verify") { // the Verify button was clicked } else if (model.Btn == "save") { // the Save button was clicked } else if (model.Btn == "redirect") { // the Redirect button was clicked } return View(); }