2010-04-09 104 views
3

我正在ASP.NET 3.5 MVC應用程序中使用多個表單進行視圖。表格1包含有關產品的信息,並將形成帶有刪除按鈕的購物車。表格2如下所示,用於從購物車獲取信息並創建訂單。MVC:從多種形式的頁面提交一個表格

<% 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) 
{ 
    //.. 
} 

修改之後:

好吧,我想你建議,但不幸的是我不能得到它的工作。我改變了下面的東西;

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

回答

2

您可以選擇使用Html.BeginForm指定動作和控制器的名稱

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

機器人感謝您的快速響應,從來沒有新的這是可能的!我會嘗試一下並回復你。 – Rob 2010-04-09 11:25:51

+0

好吧,我嘗試了你的解決方案,但不幸的是它不工作:(我修改了與當前情況相關的問題 – Rob 2010-04-09 11:52:41

+0

在你的例子中,你已經調用了你的控制器「Controller」,它應該是你的控制器的* actual *名稱 – 2010-04-09 12:33:10

1

你應該使用第二種形式的Html.BeginForm的重載形式來指定動作和控制器的使用,例如:

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

羅布,

,則應指定NAME控制器的並不僅僅是「控制器」按您編輯的代碼。因此,如果您的SaveOrder操作在HomeController控制器類中,那麼您應該使用:

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

對不起,這是我在代碼中做的,但由於公司的限制我不允許發佈確切的代碼,所以我重命名了控制器。 – Rob 2010-04-09 12:48:26