2011-02-25 63 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