2012-06-12 5 views
7

だから私はViewBag.Somethingがあり、このデータはランダムに生成されます。私の見解では、これを@Html.LabelFor(m => m.Something, (string)ViewBag.Something)のようなラベルに設定しました。これはうまくいきますが、フォームを送信するとエラーが発生する可能性があります。エラーがある場合は、このラベルを同じままにする必要があります。ダイナミック/ランダムデータはもう必要ありません。このViewBag。自分のコントローラにプライベート変数を持たずにこの値を保持する方法はありますか? MVC/Razorがやっている素晴らしい方法?フォーム投稿後にViewBagデータを保存するにはどうすればよいですか?

答えて

1

getでモデルを設定し、動的に設定し、return view()が実行されている場合はreturn view(model)を実行します。次に、ビューで、必要な値を渡し続ける隠しフィールドを設定します。ポストでこの作業をするためのサーバーコードについて心配する必要がなく、セッションについて心配する必要がないので、このルートを選択しました。 (この方法Iユーザ)投稿後viewbagでメッセージを表示する

+0

これにはセキュリティ上の問題があります。誰かがコードを検査すると、データを取得したり修正したりすることもできます... オブジェクトであればどうなりますか? – Nick

12

オプション1:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something }) 

オプション2: あなたはTempDataをを使用することができます

ルート値を使用してコントローラに "ViewBag.Something" の値を渡します。

public ActionResult Index() 
{ 
var Something = "YOURVALUE"; 
TempData["Something"] = Something; 
....... 
} 


public ActionResult OtherAction() 
{ 
    var Something = TempData["Something "]; 
    ........... 
} 

アクションメソッド間のアクションメソッドは、このようなフォームが掲載されているときにエラーが発生した場合、またはメソッドが追加にリダイレクトする必要があるかのように、別のアクションにデータを渡す必要がある場合があります渡しますユーザーがログインビューに誘導され、元のアクションメソッドに戻るときに発生する可能性があります。

アクションメソッドは、コントローラのRedirectToActionメソッドを呼び出して次のアクションを呼び出す前に、コントローラのTempDataDictionaryオブジェクトにデータを格納できます。 TempDataプロパティの値は、セッション状態に格納されます。 TempDataDictionary値が設定された後に呼び出されるアクションメソッドは、オブジェクトから値を取得して処理または表示できます。 TempDataの値は、読み取るまで、またはセッションがタイムアウトするまで保持されます。この方法でTempDataを永続化すると、TempDataの値が単一の要求を超えて利用できるため、リダイレクトなどのシナリオが可能になります。

+0

私が提出し、打ったときので、私はTempDataをにViewBag.Somethingを格納します何かがうまくいかない場合、それは使用可能になりますか?私のラベルがViewBagから取り込まれているので、問題が生じる可能性があります。 – Pittfall

+0

試してみることができるもう1つのオプションについては、私のアップデートを参照してください。 –

+0

助けてくれてありがとう、それは良く見えますが、私はあなたの答えを受け入れることができないので、私は別の方向に行った – Pittfall

-1

ActionResult SubmitUser(){ 

    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 


[HtttpPost] 
ActionResult SubmitUser(){ 

TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
} 

値がメソッドを取得するために送る..です

関連する問題