Asp.net mvc ASP.NET MVC强类型ViewModel-组合创建/列表视图
我首先学习ASP.NETMVC和实体框架代码,通过创建一个简单的Bug/Feature跟踪系统学习LINQ。我想模仿Twitter界面,让用户在上面提交表单,并在下面显示提交的内容。我不确定如何构造强类型视图和所述模型。我想将我的创建视图和索引视图合并到一个视图中,问题是创建采用单一类型的条目(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”视图
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
如果那是正确的话,我就不知道了。上的帖子说不应该在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>