当前位置 : 主页 > 网络编程 > ASP >

在ASP.NET MVC表单上允许多个按钮的最佳方法是什么?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我有一种感觉,我对此过于“网状”,但无论如何我都会问.我在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.");
    }

这样做 – 控制器根据单击的按钮选择正确的操作.但是,它并不理想,因为输入按钮的值也是显示的文本.如果我想翻译这个应用程序,那么行动就会破裂.为了解决这个问题,我可以使用< button>元素,允许文本和值不同.但是,这个应用程序是用于Pocket IE,显然Pocket IE处理这些不同 – 它提交Command的两个值,这打破了行动.

因为这是针对Pocket IE的,所以我对JavaScript的处理方式也非常有限. Ajax已经出局,但我可以通过按钮’onClick设置隐藏字段.

所以,我的问题是在MVC视图中允许单个表单有多个按钮的最佳方法是什么?或者,我应该以某种方式将我的观点分解为多种形式吗?

我会建议使用2种不同的动作的多种形式.我认为这也更容易测试:

(c => c.Search(),FormMethod.Get);
   {%>

(c => c.Send(),FormMethod.Post);
   {%>
发送

或类似的东西.然后在控制器中你有2个相应的动作.这意味着责任被打破了.使用MVC,您可以拥有多个表单,与Webforms不同.所以你可以挣脱!

网友评论