【问题标题】:MVC: Submit one form from a page with multiple formsMVC:从具有多个表单的页面提交一个表单
【发布时间】:2010-04-09 10:12:09
【问题描述】:

我在一个 ASP.NET 3.5 MVC 应用程序中工作,其中我有一个包含多个表单的视图。表格 1 包含有关产品的信息,并将形成一个带有删除按钮的购物车。表格2如下,用于从购物车中获取信息并创建订单。

<% using (Html.BeginForm()) { %>
   <%=Html.Hidden(Order.ProductId", "E63EF586-F625-4C8D-B82E-E63A6FA4A63C")%>
   <%=Html.Hidden(Order.Amount", 16)%>
   <input type="submit" value="Pay" />

第一个表单包含一个类似的带有 foreach 循环的 beginform,用于从模型中获取有关产品的信息。 当我在第二个表单上使用提交按钮时,似乎所有内容都已提交,并且第一个表单的控制器中的操作正在尝试处理请求。这就是发生错误的地方,因为视图模型中的信息与预期的不对应。

试图处理请求的控制器:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ShowShoppingcartForm([Bind(Prefix = "Order")] MyViewmodel viewModel)
{
//..
}

预期处理请求的控制器:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveOrder([Bind(Prefix = "Order")] MyViewmodel viewModel)
{
    //..
}

修改后:

好的,我尝试了您的建议,但不幸的是我无法让它发挥作用。我改变了如下内容;

表格一:

<%foreach (var cartItem in Model.ProductList) { %>
  <% using (Html.BeginForm("ShoppingCart","ControllerName", FormMethod.Post,null)) { %>
        <tr>     
            <td> <%=Html.Hidden("Cart.ProductVariantId", cartItem.ProductVariant.Id)%>
                 <%=Html.Encode(cartItem.ProductVariant.Product.Name)%> </td>
            <td> <%=Html.Encode(cartItem.ProductVariant.Product.Description)%> </td>
            <td> <%=Html.TextBox("Cart.Amount", cartItem.Amount)%></td>
            <td> <%=Html.Encode(cartItem.Amount)%> </td>
            <td> <%=Html.Encode(cartItem.Product.PriceInCents)%> </td>
            <td> <input type="submit" value="Remove" width="50px" /> </td>
            <td> <input type="submit" value="Submit" width="50px" /> </td>
        </tr>
        <% } %> 
    <% } %>

表格2:

<% using (Html.BeginForm("SaveOrder", "ControllerName", FormMethod.Post, null))
{%>

   <%=Html.Hidden("Order.ProductId", "E63EF586-F625-4C8D-B82E-E63A6FA4A63C"")%>
   <%=Html.Hidden(Order.Amount", 1)%>
   <input type="submit" value="Pay" />
<%} %>

【问题讨论】:

    标签: c# asp.net asp.net-mvc forms post


    【解决方案1】:

    您可以选择使用 Html.BeginForm 指定动作和控制器的名称

    <% using (Html.BeginForm("SaveOrder", "ControllerName", FormMethod.Post, null))
    { %>
    ....
    

    【讨论】:

    • Bot 感谢您的快速响应,这是不可能的!我会尝试一下并回复你。
    • 好的,我尝试了您的解决方案,但不幸的是它不起作用:(我根据当前情况修改了问题
    • 在您的示例中,您将控制器称为“控制器”。这应该是控制器的实际名称。
    • 由于应用程序的更改,否则能够解决它。但是,尽管如此,还是感谢您的提示,这是不可能的,并且可以很好地使用它!
    【解决方案2】:

    您应该在第二个表单上使用 Html.BeginForm 的重载形式来指定要使用的操作和控制器,例如:

    <% using (Html.BeginForm("SaveOrder", "YourController")) { %>
    

    【讨论】:

      【解决方案3】:

      罗伯,

      您应该根据您编辑的代码指定控制器的 NAME 而不仅仅是“控制器”。因此,如果您的 SaveOrder 操作在 HomeController 控制器类中,那么您应该使用:

      <% using (Html.BeginForm("SaveOrder", "Home", FormMethod.Post, null)) { %>
      

      【讨论】:

      • 抱歉给您带来了困惑,但这是我在代码中所做的,但由于公司限制,我不允许发布确切的代码,所以我重命名了控制器。
      猜你喜欢
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多