2011-05-04 68 views
0

这与ASP.Net MVC 2MVC:Model未提交多种形式

我有一个绑定到我的视图模型(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)时,它会被正确提交,并且我可以在控制器方法中看到这些值。但是,即使我使用隐藏字段来绑定它,也没有其他行通过控制器。

我是否缺少特定于索引的内容?

在此先感谢..

回答

1

我建议有一个形式的所有行,然后在每行使用按钮元素,而不是输入如下:

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

你应该有一个在你的控制器动作参数调用buyticket,并应具有被点击的按钮的票ID

+0

谢谢马丁!这是工作.. – 2011-05-04 08:49:02

0

如何如下:

<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应用程序中看到。

+0

从您的文章,我看到两个更改解决方案1.集体移动所有隐藏的领域在最后,2.删除runat =服务器属性。我对么? – 2011-05-04 07:03:29

+0

@阿尼尔索曼,是的。我还用'Html.Hidden'替换了'Html.HiddenFor'助手,并引入了控制器操作将采用的视图模型。 – 2011-05-04 07:10:00