2011-05-04 95 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