pro*_*ock 3 asp.net asp.net-mvc razor asp.net-mvc-3
我有一个使用"标签"的mvc视图,这些标签中的每一个都显示相同数据的不同形式(可从我的viewmodel获得).数据显示如下:
<div id=tab1>
@foreach (Path p in Model.Paths.Where(r => r.PathType == "HR"))
{
(displays html and data)
}
</div>
<div id=tab2>
@foreach (Path p in Model.Paths.Where(r => r.PathType == "IT"))
{
(displays html and data)
}
</div>
Run Code Online (Sandbox Code Playgroud)
等等...因为每次迭代使用相同的html和命名变量(p),不重复这些值的最佳方法是什么?
使用自定义显示模板.
共享\ DisplayTemplates\Path.cshtml
@model YourApp.Model.Path
@* (displays html and data) *@
Run Code Online (Sandbox Code Playgroud)
MainView.cshtml
<div id=tab1>
@Html.DisplayFor(model => model.HrPaths)
</div>
<div id=tab2>
@Html.DisplayFor(model => model.ItPaths)}
</div>
Run Code Online (Sandbox Code Playgroud)
您应该将PathsVM中的对象拆分为单独的属性,例如将.Where过滤器放入Controller中.
这样,你只有一个模板来渲染出类型(因为它是两个属性的相同类型),你可以避免使用foreach循环,将HTML保存在一个地方等等.
您还可以更进一步,Dictionary<string,IEnumerable<Path>>在视图模型中创建一个,其中键是选项卡名称,值是预过滤的集合Path.
然后您的视图变为:
@Html.DisplayForModel()
Run Code Online (Sandbox Code Playgroud)
然后是外模板(你需要VM上的UIHint):
<div id=@Model.Key>
@Html.DisplayFor(model => model.Value)
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |