2011-02-25 117 views
2

我正在學習ASP.NET MVC和實體框架代碼首先,LINQ通過創建一個簡單的Bug/Feature跟蹤系統。我想通過讓用戶提交上面的表單並在下面顯示提交的內容來模仿Twitter界面。我不確定如何構建強類型視圖和上述模型。我想將我的創建和索引視圖合併到一個視圖中,問題是創建需要一個類型條目(Pylon.Models.Entry),而索引需要IEnumerable條目(IEnumerable<Pylon.Models.Entry>)。以下是我的viewmodel類和Display視圖。我只是從「創建」和「索引」視圖複製腳手架生成的代碼,明顯混合不同的模型導致運行時錯誤,因此視圖被破壞。我的問題是我如何重組視圖。ASP.NET MVC強類型ViewModel - 組合創建/列表視圖

// Entry ViewModel 
public class EntryViewModel 
{ 
    public Entry Entry { get; set; } 
    public IEnumerable<Entry> Entries { get; set; } 
} 

@* Display View *@ 

@model ? 

@{ 
    ViewBag.Title = "Display"; 
} 

<hr /> 

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

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Description) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Description) 
      @Html.ValidationMessageFor(model => model.Description) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.OpenDate) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.OpenDate) 
      @Html.ValidationMessageFor(model => model.OpenDate) 
     </div> 

     <div class="editor-label"> 
      Paradigm 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownListFor(model => model.ParadigmId, ((IEnumerable<Pylon.Models.Paradigm>)ViewBag.PossibleParadigms).Select(option => new SelectListItem 
     { 
      Text = (option == null ? "None" : option.Name), 
      Value = option.ParadigmId.ToString(), 
      Selected = (Model != null) && (option.ParadigmId == Model.ParadigmId) 
     }), "Choose...") 
      @Html.ValidationMessageFor(model => model.ParadigmId) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<hr /> 

<table> 
    <tr> 
     <th></th> 
     <th> 
      Description 
     </th> 
     <th> 
      OpenDate 
     </th> 
     <th> 
      Type 
     </th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @item.Description 
     </td> 
     <td> 
      @String.Format("{0:d}", item.OpenDate) 
     </td> 
     <td> 
      @(item.Paradigm == null ? "None" : item.Paradigm.Name) 
     </td> 
    </tr> 
} 

</table> 

任何指針或更好的教程/工作代碼將是巨大的。

回答

5

請進行以下更改。

  1. 設置@model EntryViewModel在視圖頂部。
  2. 對於創建形式,改變model => model.Descriptionmodel => model.Entry.Description,所以model被替換model.Entry
  3. 上市模板,請執行下列操作變化。 @foreach (var item in Model.Entries)
+0

非常感謝,這正是需要發生的事情。 – CyberUnDead 2011-02-25 17:23:39