1

PostBack 中に ViewBag 関数のポインター値が失われるという問題があります。

私のサイトには、ViewBag 関数ポインタを利用して顧客のステータスを示すバナー (部分ビュー) があります。

ViewBag.CustomerStatus= new Func<id, string>(GetCustomerStatus);

(ここで、id は顧客の ID であり、返された文字列は返されたステータスです)

バナーの部分ビューを使用する他のページに移動し始めると、CustomerStatus ViewBag 変数が失われます。ViewBags は「ページごと」にしか利用できないことはわかっていますが、冗長で ViewBag.CustomerStatus= new Func(GetCustomerStatus); を繰り返さずに、アプリケーションの他の場所から顧客ステータス関数を利用できるようにするにはどうすればよいですか? すべての ActionMethod 呼び出しで?

関数ポインタを Session/ViewState に格納することは可能ですか? 安全 ?ポストバック後も最新の顧客ステータスにアクセスするにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

3

これには、建築的に言えば、私を間違った方向にこすりつける何かがあります。ビューに関数呼び出しを渡すのではなく、 dataを渡す必要があります。あなたのアプローチは、MVC が支持する「関心の分離」に違反しています。

表示するデータを表すビュー モデルを構築し、関数を呼び出して (できればモデル内から、または必要に応じてコントローラーから) 入力します。次に、モデルをビューに渡し、データの表示方法をビューに任せます。

呼び出しごとに反復するデータがある場合は、OnActionExecuting メソッドをオーバーライドしてモデルに追加し、その時点でモデル (または ViewBag) に値を追加できます。

于 2012-04-16T18:45:34.353 に答える
2

私は最終的に次のアプローチを取りました...

部分ビューを直接レンダリングする代わりに、コントローラーの Action メソッドを介して呼び出されるように変更しました。

私が作成しました:

 public PartialViewResult CustomerStatus()
 {
  ...here I called my private GetCustomerStatus methods
  ViewBag.CustomerStatus = GetCustomerStatus();
  Return PartialView("
 }

したがって、ViewBag 関数ポインターを個別に呼び出す代わりに、ヘッダー バナーをレンダリングする必要があるときはいつでも、 @Html.Partial("BannerPartialView") の代わりに、同じバナーを返す @Html.Action(CustomerStatus) メソッドを呼び出します。利用可能な顧客ステータス変数。

混乱させず、他の誰かに役立つことを願っています。

于 2012-04-17T20:02:13.957 に答える