我有一种感觉,我对此过于"网状",但无论如何我都会问.我在ASP.NET MVC项目中有一个表单,它有一些输入字段和两个按钮.一个按钮用于"过滤"其中一个列表框.另一个用于提交表单.我的观点看起来像这样:
<%using (Html.BeginForm()) {%> <%=Html.TextBox("SearchItems") %> <%=Html.ListBox("SelectedItems", new MultiSelectList(model.AvailableItems,"Id", "Name", model.SelectedItems))%> //Some other form fields. <%} %>
我的动作看起来像这样:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Index([Bind(Prefix = "")]SendMessageRequest model) { if (model.Command == "Find") return SearchItems(model); if (model.Command == "Send") return Send(model); throw new Exception("Invalid command."); }
这样做 - 控制器根据单击的按钮选择正确的操作.但是,它并不理想,因为输入按钮的值也是显示的文本.如果我想翻译这个应用程序,那么行动就会破裂.为了解决这个问题,我可以使用
因为这是针对Pocket IE的,所以我对JavaScript的处理方式也非常有限.Ajax已经出局,但我可以通过按钮'onClick设置隐藏字段.
所以,我的问题是在MVC视图中允许单个表单有多个按钮的最佳方法是什么?或者,我应该以某种方式将我的观点分解为多种形式吗?
我会建议使用2种不同的动作的多种形式.我认为这也更容易测试:
(c => c.Search(),FormMethod.Get); {%>查找(c => c.Send(),FormMethod.Post); {%>发送或类似的东西.然后在控制器中你有2个相应的动作.这意味着责任被打破了.使用MVC,您可以拥有多个表单,与Webforms不同.所以你可以挣脱!