我有一种感觉,我太“网络形式”与此,但我会问无论如何。我在ASP.NET MVC项目中有一个表单,它有一些输入字段和两个按钮。一个按钮用于“过滤”其中一个列表框。另一个用于提交表单。我的观点看起来是这样的:允许ASP.NET MVC表单上的多个按钮的最佳方式是什么?
<%using (Html.BeginForm())
{%>
<%=Html.TextBox("SearchItems") %>
<input type="submit" name="Command" value="Find" />
<%=Html.ListBox("SelectedItems", new MultiSelectList(model.AvailableItems,"Id", "Name", model.SelectedItems))%>
//Some other form fields.
<input type="submit" name="Command" value="Send" />
<%} %>
我的行动看起来是这样的:
[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,显然Pocket IE处理这些不同 - 它提交两个命令的值,这打破了行动。
由于这是用于Pocket IE,我也挺为我所用JavaScript做术语的限制。 Ajax已经出来,但是我可能会从按钮的onClick中设置一个隐藏的字段。
所以,我的问题是,什么是允许对一个MVC视图多个按钮的单一形式的最佳方式?或者,我是否应该以某种方式将我的观点分解为多种形式?
这也应该删除的JavaScript支持 – 2008-12-17 23:28:52
问题与方法的问题是,在这种情况下,“搜索”形式必须是_inside_“发送”的形式,并在页面上的所有值都必须坚持。在此解决方案中,如果用户在发送表单中输入了某些内容,然后搜索,则发送表单将失去其状态(FireFox除外)。 – Daniel 2008-12-18 15:34:59