开发者

MVC : Model does not submit for multiple forms

This is related to ASP.Net MVC 2

I have a model (MoviesForAll) bound to my view and this model has a collection of class ICollection. I want my user to buy single ticket at a time by clicking submit button 'Buy this ticket' so I have placed a button besides each row representing the ticket details. This lead to following sequence

<%@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>
           ...
           ..开发者_如何学Python.
           <td>
             <input type="submit" value="buy this ticket" runat="server">
           </td>
      <% } %>
  </tr>
  <% } %>
</table>

This creates a form for each row of tickets having single submit button in that form.

The problem is, when I submit first row (having index 0) by clicking the button, it gets submitted properly and I can see the values in controller method. But no other row gets through to controller even if I have used hidden fields to bind it.

Am I missing anything here specific to index or something?

Thanks in advance..


I would suggest having one form for all the rows, then on each row use the button element instead of an input as follows:

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

You should have a parameter on your controller action called buyticket and that should have the ticket id of the button which was clicked


How about the following:

<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>

and then:

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

and the action:

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

Remark: notice that I have removed the runat="server" attribute from the submit button as well because this is something that you definitely don't want to see in an ASP.NET MVC application.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜