私はまだ ASP.NET MVC 3 に比較的慣れていないので、ここでの経験が豊富な方に概念的な質問があります。
(単純な)例として、イベントのサインアップフォームがあるとしましょう。フォームには、イベントの名前と、ユーザーが自分の名前を入力できるテキスト ボックスが表示されます。ViewModel は次のようになります。
public class SignupFormViewModel {
public string EventName { get; set; }
[Required]
public string VolunteerName { get; set; }
}
Razor ビューは次のようになります。
<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>
}
ユーザーがフォームをサーバーに送信し、ModelState が無効な場合は、元のビューを返し、エラーを表示できるようにモデルを返します。(この例では、これはクライアントで処理されないエラーであると想定しています)
問題は、上記の例のビューでは、EventName がフォーム データと共に送信されないことです。フォームフィールドではなく、ページコンテンツにのみ使用したい. しかし、戻って検証エラーをユーザーに表示する必要がある場合は、EventName プロパティが失われています。
では、同じビューに戻ってくる投稿を通じて、このフォームフィールド以外のアイテムを保持するためのオプションは何ですか?
EventName プロパティを保持する隠しフィールドを作成できることはわかっていますが、フォーム フィールド以外のすべてのプロパティを隠しフィールドに配置することを余儀なくされていることについては、何か違和感があります。また、コントローラーで HttpPost アクションに入り、ビューを返す前にそのデータをモデルに再読み込みできることもわかっていますが、これも扱いにくいと感じます。
私はこれを行うための基本的な方法をよく理解していると思いますが、よりクリーンな方法やベストプラクティスがあるかどうか疑問に思っていました.
ありがとう