尽管为两者重用相同的视图似乎是个好主意,但我可以告诉您,最终您将不得不将它们拆分,通常是由于请求的某些新功能仅适用于其中之一。练习为“编辑”和“创建”提供专用视图是一个好主意。在这和保持它们 DRY 之间的一个很好的折衷是让视图包含开始表单标记,如果需要,可能是一些 JavaScript 或任何其他引用,但是对于字段本身,使用 @Html.EditorFor() 并为该数据类型创建一个 EditorTemplate。这样它仍然尽可能地保持 DRY 原则,但仍然让你坚持单一责任原则。当然,如果它们确实变得更加复杂,那么共享的 EditorTemplate 也可能需要更改,@Html.EditorFor(x=>x, "CustomerEdit")
通常,让控制器决定视图的关注点(生成表单 URL)是一种不好的做法。
视图/客户/Create.cshtml
@using (Html.BeginForm("Create", "Customers", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.EditorFor(x=>x)
}
视图/客户/Edit.cshtml
@using (Html.BeginForm("Edit", "Customers", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.EditorFor(x=>x)
}
视图/客户/EditorTemplates/Customer.cshtml
<div class="control-group">
<label class="control-label">@Html.DisplayNameFor(model => model.Name)</label>
<div class="controls">
<span class="text">
@Html.EditorFor(model => model.Name)
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">@Html.DisplayNameFor(model => model.PhoneNumber)</label>
<div class="controls">
<span class="text">
@Html.EditorFor(model => model.PhoneNumber)
</span>
</div>
</div>
...etc