C# MVC:从包含多个表单的页面提交一个表单

C# MVC:从包含多个表单的页面提交一个表单,c#,asp.net,asp.net-mvc,forms,post,C#,Asp.net,Asp.net Mvc,Forms,Post,我在一个ASP.NET 3.5 MVC应用程序中工作,其中有一个包含多个表单的视图。表单1包含有关产品的信息,并将形成一个带有删除按钮的购物车。表格2如下所示,用于从shoppingcart获取信息并创建订单 <% using (Html.BeginForm()) { %> <%=Html.Hidden(Order.ProductId", "E63EF586-F625-4C8D-B82E-E63A6FA4A63C")%> <%=Html.Hidden(O

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

<% using (Html.BeginForm()) { %>
   <%=Html.Hidden(Order.ProductId", "E63EF586-F625-4C8D-B82E-E63A6FA4A63C")%>
   <%=Html.Hidden(Order.Amount", 16)%>
   <input type="submit" value="Pay" />
预期处理请求的控制器:

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

好的,我试过你的建议,但不幸的是我没能把它付诸实施。我改变了事情如下

表格1:

<%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" />
<%} %>

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

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

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

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

....
Rob

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

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


Bot感谢您的快速响应,这是前所未有的!好的,我尝试了你的解决方案,但不幸的是,它不起作用:(我用当前的情况修改了问题,在你的例子中,你称你的控制器为“控制器”。这应该是您的控制器的实际名称。由于应用程序中的更改,我们能够以其他方式解决此问题。但是,感谢您提供的提示,这是不可能的,并且可以很好地使用它!很抱歉造成混淆,但这是我在代码中所做的,但是由于公司限制,我不允许发布准确的代码我重新命名了控制器。