多達這似乎是一個好主意,再利用兩個相同的看法,我可以告訴你,最終你將不得不將其分離,通常作爲請求的一些新功能的結果僅適用於其中一項。進入編輯和創建專用視圖的做法是一個好主意。在DRY和DRY之間做一個很好的折衷就是讓視圖包含begin表單標籤,如果需要的話可以包含一些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
,你也可以檢查Model是否爲null,例如:BeginForm(Model == null?「Create」:「Edit」,...) – lante