ViewBag.Something
このデータはランダムに生成されます。私の見解では、これを so のようなラベルに設定しました@Html.LabelFor(m => m.Something, (string)ViewBag.Something)
。これはうまくいきますが、フォームを送信するとエラーが発生する可能性があり、エラーが発生した場合は、このラベルを同じままにする必要があります。動的/ランダムデータはもう必要ないので、生成されたコントローラーメソッドを呼び出しませんこのViewBag。コントローラーにプライベート変数を持たずにこの値を保持する方法はありますか? MVC/Razor が行う良い方法はありますか?
3 に答える
オプション1:
ルート値を使用して、「ViewBag.Something」の値をコントローラーに渡します。
@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something })
オプション2:TempDataを使用できます。
public ActionResult Index()
{
var Something = "YOURVALUE";
TempData["Something"] = Something;
.......
}
public ActionResult OtherAction()
{
var Something = TempData["Something "];
...........
}
アクションメソッド間で状態を渡す
アクションメソッドは、フォームの投稿時にエラーが発生した場合や、ユーザーがログインビューに移動してからに戻るときに発生する可能性があるように、メソッドが追加のメソッドにリダイレクトする必要がある場合など、別のアクションにデータを渡す必要がある場合があります。元のアクションメソッド。
アクションメソッドは、コントローラーのRedirectToActionメソッドを呼び出して次のアクションを呼び出す前に、コントローラーのTempDataDictionaryオブジェクトにデータを格納できます。TempDataプロパティ値はセッション状態で保存されます。TempDataDictionary値が設定された後に呼び出されるアクションメソッドは、オブジェクトから値を取得し、それらを処理または表示できます。TempDataの値は、読み取られるまで、またはセッションがタイムアウトするまで持続します。TempDataの値は単一のリクエストを超えて利用できるため、この方法でTempDataを永続化すると、リダイレクトなどのシナリオが可能になります。
get では、モデルをセットアップし、動的に設定し、return view()
が実行されているときにreturn view(model)
. 次に、ビューで、必要な値を渡し続けることができる隠しフィールドを設定します。投稿でこれを機能させるためにサーバー コードを心配する必要がなく、セッションについても心配する必要がないため、このルートを選択しました。
投稿後にビューバッグにメッセージを表示する(私はこの方法を使用しています)
ActionResult SubmitUser(){
ViewBag.Msg =TempData["Msg"];
return view();
}
[HtttpPost]
ActionResult SubmitUser(){
TempData["Msg"] ="Submitted Successfully"];
return view();
}
値はメソッドを取得するために送信されます..