これは両方に同じビューを再利用するのは良い考えのように思えますが、通常はどちらか一方にのみ適用される新しい機能が要求された結果として、最終的にはそれらを分割する必要があると言えます。編集と作成の両方に専用のビューを用意する練習を始めることをお勧めします。これとDRYを維持することの間の適切な妥協点は、ビューに開始フォームタグ、必要に応じてJavaScriptまたはその他の参照を含めることですが、フィールド自体には@ Html.EditorFor()を使用し、そのデータ型のEditorTemplateを作成します。そうすれば、DRYの原則を可能な限り維持しながら、単一責任の原則に固執することができます。確かに、さらに複雑になった場合は、共有EditorTemplateも変更する必要がある可能性があります。@Html.EditorFor(x=>x, "CustomerEdit")
一般に、ビューの懸念事項(フォームURLの生成)をコントローラーに指示させるのは悪い習慣です。
Views / Customers / Create.cshtml
@using (Html.BeginForm("Create", "Customers", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.EditorFor(x=>x)
}
Views / Customers / Edit.cshtml
@using (Html.BeginForm("Edit", "Customers", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.EditorFor(x=>x)
}
Views / Customers / 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