2012-10-08 132 views
1

跨越倍數的意見傳遞數據,也許這個問題被反覆看過在這裏,但我沒能找到答案。使用MVC 3和EF

我的項目是關於酒店的預訂。我有一個課程預訂巫婆有一個ChoosenRooms Icollection和一個代表de用戶進行預訂的類,以及其他類似日期和其他內容的類。

的過程是這樣的:

在我的第一個觀點我得到的選擇的房間,日期等,然後我傳遞給我的第二個觀點,其中i'm去獲取用戶信息,然後我有第三個視圖,我想顯示所有收集的信息,以便用戶最終可以單擊一個按鈕來保存數據。

我的問題是,我需要在所有這些意見通過預訂對象類。在我的測試中,我發現原始類型通過很好但是當我從視圖回發到下一個控制器操作時,ChoosenRooms的iColletion會丟失。

有人可以張貼一些示例如何,發佈從一個視圖回控制器,複雜的類型,比如內的另一個類預訂ChoosenRooms,都沒有在這個過程中失去了什麼?

或者可能解釋爲什麼這個信息丟失?

代碼:

public class Reserva 
{ 
    public virtual int ID { get; set; } 

    [NotMapped] 
    public string[] q { get; set; } 

    [Display(Name = "Cliente")] 
    public virtual Utilizador utilizador { get; set; } 

    [Display(Name = "Quarto")] 
    public virtual ICollection<Quartos> ChoosenRooms{ get; set; } 

    [Display(Name = "Serviços Adicionais")] 
    public virtual ICollection<ReservasItens> itens { get; set; } 

視圖

@model SolarDeOura.Models.Reserva 
    @{ 
     ViewBag.Title = "AddReservaUser"; 
     var _reserva = TempData["reserva"] as Reserva; 
    } 

    <h2>AddReservaUser</h2> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Reserva</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.dtEntrada) 
     </div> 
     <div class="editor-field"> 
      @Html.DisplayFor(model => model.dtEntrada) 
     </div> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.dtSaida) 
     </div> 
     <div class="editor-field"> 
      @Html.DisplayFor(model => model.dtSaida) 
     </div> 
     <div class="editor-label"> 
      @Model.q.Count() Choosen Rooms 
     </div> 

     @foreach (var q in Model.ChoosenRooms) 
     { 
      <ul> 
       <li> 
        @Html.DisplayFor(modelitem => q.descricao) 
       </li> 
      </ul> 
     } 

發佈從這裏回是問題。在這個視圖中「@foreach(Model.ChoosenRooms中的var q)」有數據但回傳數據會丟失。

+0

是否有可能爲你切換到[單頁的應用程序(http://www.asp.net/single-page-application/an-introduction-to-spa/overview/landingpage)(SPA)與MVC4? –

+0

例子根本不清楚。根本不使用第一個_reserva變量。第二,你正在使用DisplayFor,而不是EditorFor。最後交換「modelitem」和「q」,我不確定它是否生成正確的元素.Id在頁面上的HTML標記中。 而且,控制器操作的外觀如何? – Nenad

回答

1

模型綁定在這一點上的概念是不是對我非常清楚,關於這個話題的一些知識,是所有需要解決的問題。

在簡歷:

視圖得到一個模型,該模型是一種複雜的類型:類[雷塞爾瓦]具有[ChoosenRooms]的集合,這也是一個複雜類型。

@Html.DisplayFor(modelitem => q.descricao)呈現必要的html元素來顯示數據,但沒有必要的html被髮回到控制器(輸入元素或隱藏字段),所以模型聯編程序失敗。

此外控制器(後)動作參數沒有匹配字段的屬性名稱,在這種情況下,它需要是String[]類型,因爲它是一個值的集合。

我也建議閱讀顯示屏和模板編輯器模板。