私はまだASP.NET MVC 3の新機能ですが、ここでは経験豊富な概念的な質問があります。非形式を維持するASP.NET MVCのモデルデータ
私はイベントの申し込みフォームを持っています(簡単な例)。フォームにはイベントの名前と、ユーザーが名前を入力できるテキストボックスが表示されます。ユーザーがサーバーにフォームを送信するとにModelStateが無効である、我々は返す場合
<h2>Sign up for @Model.EventName</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<div class="editor-field">
@Html.EditorFor(model => model.VolunteerName)
@Html.ValidationMessageFor(model => model.VolunteerName )
</div>
}
:レイザービューはこのようになります
public class SignupFormViewModel {
public string EventName { get; set; }
[Required]
public string VolunteerName { get; set; }
}
:ViewModelには、次のようになりますオリジナルエラーを表示できるようにモデルを表示して戻します。 (この例では、これがクライアント上で処理されないエラーであると仮定しています)
上記の私の例では、フォームデータでEventNameが送信されないという問題があります。フォームフィールドではなく、ページコンテンツにのみ使用したいのです。しかし、私が戻って、ユーザーに検証エラーを表示する必要がある場合、私はEventNameプロパティを失いました。
この非フォームフィールド項目を同じビューに戻ってくるポストで保存するための選択肢は何ですか?
私はEventNameプロパティを保持するために非表示のフィールドを作成できますが、非フォームフィールドの各プロパティを非表示のフィールドに配置することを強いられることはありません。私はコントローラのHttpPostアクションに入り、ビューに戻る前にそのデータをモデルにリロードすることもできると知っていますが、それも厄介です。
私はこれを行う基本的な方法をよく理解していると思いますが、より良い方法やベストプラクティスがクリーナーになったのかどうか疑問に思っていました。 - )
ありがとうございます。
私はTempData上でViewDataを選択します。 TempDataは、セッションを不必要に使用します。 ViewDataは特にビューを変更するためのものです。 提案されているもう1つのオプションは、VMのEventNameを再膨張(再設定)することです。 –
@EliGassertすべての 'ViewData'は、ビューのフィールドをポピュレートしてポストバックします - とにかく隠しフィールドをレンダリングする必要があります。 –
ありがとう@Ant P、私は隠しフィールドに固執すると思います。私は思慮深い説明/理論的根拠に感謝します。 –