我有两个MVC视图...一个用于显示细节,另一个用于编辑值。它们使用几乎相同的模板,但在切换到编辑器视图时DisplayFor更改为EditorFor。如何在视图中重用我的基本布局结构,这样如果我需要更改基本布局,我只需要在一个位置而不是多个视图中进行?
以下是显示视图中使用的表格示例:
<table>
<tr>
<td class="label">First Name:</td>
<td class="field">@Html.DisplayFor(x => Model.FirstName)</td>
</tr>
<tr>
<td class="label">Last Name:</td>
<td class="field">@Html.DisplayFor(x => Model.LastName)</td>
</tr>
<tr>
<td class="label">Email:</td>
<td class="field">@Html.DisplayFor(x => Model.Email)</td>
</tr>
</table>
答案 0 :(得分:3)
您可以将Mode属性添加到视图模型中:
public bool IsInEditMode { get; set; }
然后,您的控制器可以使用相同的视图&amp;模型,只是相应地设置此属性。您的观点最终会像:
<table>
<tr>
<td class="label">First Name:</td>
<td class="field">
@if (!Model.IsInEditMode)
{
@Html.DisplayFor(x => Model.FirstName)
}
else
{
(render EditorFor plus any validation helpers)
}
</td>
</tr>
...etc...
</table>
答案 1 :(得分:1)
或者你可以使用更清洁的东西来完成这项工作,比如Razor helper
public bool IsInEditMode { get; set; }
@helper EditorFor(System.Linq.Expressions.Expression<Func<ViewModel, string>> exp)
{
@((Model.IsInEditMode ) ? @Html.EditorFor(exp) : @Html.DisplayFor(exp))
}
答案 2 :(得分:0)
拥有一个检查实体ID的动态视图。剃刀真棒!如果为0或null则为新实体,否则为编辑模式。
Razor Conditional!