Asp.net mvc ASP.NET MVC强类型ViewModel-组合创建/列表视图

Asp.net mvc ASP.NET MVC强类型ViewModel-组合创建/列表视图,asp.net-mvc,razor,viewmodel,Asp.net Mvc,Razor,Viewmodel,我首先学习ASP.NETMVC和实体框架代码,通过创建一个简单的Bug/Feature跟踪系统学习LINQ。我想模仿Twitter界面,让用户在上面提交表单,并在下面显示提交的内容。我不确定如何构造强类型视图和所述模型。我想将我的创建视图和索引视图合并到一个视图中,问题是创建采用单一类型的条目(Pylon.Models.Entry),而索引采用IEnumerable of Entry(IEnumerable)。下面是我的viewmodel类和显示视图。我只是从“Create”和“Index”视图

我首先学习ASP.NETMVC和实体框架代码,通过创建一个简单的Bug/Feature跟踪系统学习LINQ。我想模仿Twitter界面,让用户在上面提交表单,并在下面显示提交的内容。我不确定如何构造强类型视图和所述模型。我想将我的创建视图和索引视图合并到一个视图中,问题是创建采用单一类型的条目(
Pylon.Models.Entry
),而索引采用IEnumerable of Entry(
IEnumerable
)。下面是我的viewmodel类和显示视图。我只是从“Create”和“Index”视图复制了scaffolding生成的代码。显然,混合不同的模型会导致运行时错误,因此视图被破坏。我的问题是如何重构视图

// Entry ViewModel
public class EntryViewModel
{
    public Entry Entry { get; set; }
    public IEnumerable<Entry> Entries { get; set; }
}
//条目视图模型
公共类入口视图模型
{
公共项{get;set;}
公共IEnumerable条目{get;set;}
}

@*显示视图*@
@模特儿?
@{
ViewBag.Title=“显示”;
}

@使用(Html.BeginForm()) { @Html.ValidationSummary(true) 进入 @LabelFor(model=>model.Description) @EditorFor(model=>model.Description) @Html.ValidationMessageFor(model=>model.Description) @LabelFor(model=>model.OpenDate) @EditorFor(model=>model.OpenDate) @Html.ValidationMessageFor(model=>model.OpenDate) 范式 @DropDownListFor(model=>model.ParadigmId,((IEnumerable)ViewBag.PossibleParadigms).Select(option=>newselectListItem { Text=(option==null?“无”:option.Name), Value=option.ParadigmId.ToString(), 所选=(Model!=null)&&(option.ParadigmId==Model.ParadigmId) }),“选择…”) @Html.ValidationMessageFor(model=>model.ParadigmId)

}
描述 开放日期 类型 @foreach(模型中的var项目){ @项目.说明 @格式(“{0:d}”,item.OpenDate) @(item.Paradigm==null?“无”:item.Paradigm.Name) }

任何指针或更好的教程/工作代码都很好。

执行以下更改

  • 在视图顶部设置
    @model EntryViewModel
  • 对于创建表单,将
    model=>model.Description
    更改为
    model=>model.Entry.Description
    ,因此
    model
    将替换为
    model.Entry
  • 对于清单模板,请执行以下更改<代码>@foreach(Model.Entries中的变量项)

  • 如果那是正确的话,我就不知道了。上的帖子说不应该在viewmodel中使用模型对象。
    也许你应该再检查一遍?

    非常感谢,这正是需要发生的事情。
    @* 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>