MVC: отправить одну форму со страницы с несколькими формами - PullRequest
3 голосов
/ 09 апреля 2010

Я работаю в приложении 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 для получения информации оизделия из модели.Когда я использую кнопку отправки во второй форме, кажется, что все отправлено, и действие в контроллере для первой формы пытается обработать запрос.Вот где возникает ошибка, поскольку информация в модели представления не соответствует ожидаемой.

Контроллер, который пытается обработать запрос:

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

Ответы [ 3 ]

2 голосов
/ 09 апреля 2010

При желании вы можете указать имя действия и контроллера с помощью Html.BeginForm

<% using (Html.BeginForm("SaveOrder", "ControllerName", FormMethod.Post, null))
{ %>
....
1 голос
/ 09 апреля 2010

Вы должны использовать перегруженную форму Html.BeginForm во второй форме, чтобы указать действие и используемый контроллер, например:

<% using (Html.BeginForm("SaveOrder", "YourController")) { %>
0 голосов
/ 09 апреля 2010

Rob

Вы должны указать NAME вашего контроллера, а не просто "Controller" в соответствии с вашим отредактированным кодом. Поэтому, если ваше действие SaveOrder находится в классе контроллера HomeController, вам следует использовать:

<% using (Html.BeginForm("SaveOrder", "Home", FormMethod.Post, null)) { %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...