MVC: модель не представлена ​​для нескольких форм - PullRequest
0 голосов
/ 04 мая 2011

Это связано с ASP.Net MVC 2

У меня есть модель (MoviesForAll), связанная с моим представлением, и у этой модели есть коллекция класса ICollection. Я хочу, чтобы мой пользователь покупал один билет за один раз, нажав кнопку отправки «Купить этот билет», поэтому я разместил кнопку рядом с каждой строкой, в которой указаны данные билета. Это приводит к следующей последовательности

<%@Page Title="title" Language="C#" MasterPageFile="~/Views/Shared/MyMaster.Master" 
Inherits="System.Web.Mvc.ViewPage<OnlineBooking.Movies.MoviesForAll>">

<Table>
  <% for(i=0; i<Model.Tickets.count; i++)
  { %>
  <tr>
      <% using (Html.BeginForm(myaction(), FormMethod.Post, new {id="myform"})) 
         { %>
           <td>
             <%= Model.tickets[i].ticketID %>
             <%= Html.HiddenFor(m=>m.tickets[i].ticketID) %>
           </td>
           <td>
             <%= Model.tickets[i].seatNo %>
             <%= Html.HiddenFor(m=>m.tickets[i].seatNo) %>
           </td>
           ...
           ...
           <td>
             <input type="submit" value="buy this ticket" runat="server">
           </td>
      <% } %>
  </tr>
  <% } %>
</table>

Это создает форму для каждой строки заявок, имеющую одну кнопку отправки в этой форме.

Проблема в том, что, когда я отправляю первую строку (с индексом 0), нажимая кнопку, она отправляется правильно, и я вижу значения в методе контроллера. Но никакие другие строки не доходят до контроллера, даже если я использовал скрытые поля, чтобы связать его.

Я что-то упускаю здесь, что-то определенное для индекса или что-то в этом роде?

Заранее спасибо ..

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Я бы предложил использовать одну форму для всех строк, а затем в каждой строке использовать элемент кнопки вместо ввода следующим образом:

<button type="submit" value="<%= Model.tickets[i].ticketID %>" name="buyticket">Buy this ticket</button>

В вашем действии контроллера должен быть параметр, называемый buyticket иу которого должен быть тикет кнопки, на которую нажали

0 голосов
/ 04 мая 2011

Как насчет следующего:

<table>
  <% for(i = 0; i < Model.Tickets.Count; i++) { %>
  <tr>
      <% using (Html.BeginForm("myaction", FormMethod.Post, new { id = "myform" })) { %>
        <td>
           <%= Model.tickets[i].ticketID %>
         </td>
         <td>
           <%= Model.tickets[i].seatNo %>
         </td>
         ...
         ...
         <td>
           <%= Html.Hidden("TicketId", Model.tickets[i].ticketID) %>
           <%= Html.Hidden("SeatNumber", Model.tickets[i].seatNo) %>
           <input type="submit" value="buy this ticket" />
         </td>
      <% } %>
  </tr>
  <% } %>
</table>

, а затем:

public class TicketToPurchaseViewModel
{
    public int TicketId { get; set; }
    public int SeatNumber { get; set; }
}

и действия:

[HttpPost]
public ActionResult myaction(TicketToPurchaseViewModel ticket)
{
    ...
}

Примечание: обратите внимание, что я удалилrunat="server" атрибут из кнопки отправки, потому что это то, что вы определенно не хотите видеть в приложении ASP.NET MVC.

...