VSで新しいスキャフォールドアイテムを作成すると、作成ビューと編集アクションのビューが作成されます。ただし、編集ビューはプライマリには@Html.HiddenFor
キー。編集ビューの作成と編集のアクションに同じ部分を使用してフォームを追加する
例:
@model MyApp.Models.Destaque
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(m => m.IdDestaque)
<div class="form-group">
@Html.LabelFor(model => model.Mensagem, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Mensagem, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Mensagem, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CaminhoImagem, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CaminhoImagem, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CaminhoImagem, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UrlLink, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UrlLink, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.UrlLink, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Salvar" class="btn btn-primary" />
</div>
</div>
</div>
}
私は(@using (...
含む)BeginForm
からすべてのコンテンツを配置し、部分的_formで@Html.HiddenFor(m => m.IdDestaque)
を続ける場合、それは私が新しい行を作成することはできません。
_Formパーシャルから@Html.HiddenFor
を削除すると、編集アクションが機能しません(ModelStateが無効です)。
これを実行してDRYの原則を維持する正しい方法は何ですか?私の編集アクションのModelState検証からPKを削除することは、 "醜い"回避策のようです。
@using (Html.BeginForm("Edit", "Controller", FormMethod.Post, new{attr1 = value1, attr2 = value2}))
{
@Html.HiddenFor(x => x.Id)
...
}
あなたは常にEditActionにポストを作る:あなたはビュー内のモデルのIDをレンダリングすると、次のようにHtml.BeginFormのための別のオーバーロードを使用する必要があります