2011-06-24 11 views
8

Viewで後で使用するためにViewBagに値を割り当てようとしていますが、次のエラーが表示されます。ViewBag- MVC3-ASP.NET

このようなコントローラの値の割り当て。

ViewBag["isAdmin"]=true; 

エラー:

Cannot apply indexing with [] to an expression of type 'System.Dynamic.DynamicObject' 

誰もが前にこれを持っていますか?

+1

'ViewBag'は'ダイナミック 'タイプですので、ドット表記を使うことができます。しかし、 'ViewData'は' Dictionary'(よくViewDataDictionary)型ですので、インデックスを使ってキーを指定する必要があります。 –

答えて

18

必要なものはViewBag.isAdmin = trueです。あなたがアクセスすることができ、フォローアップとして

if(ViewBag.isAdmin) 
{ 
    //do stuff 
} 
9

であり、ViewBag(およびViewDataを)の背後にある考え方は、原料のキーと値のペアをオフに保存し、便利なビューでそれらを超えるアクセスできることです。

はViewDataを使用すると、そのようにこれらのものを参照:

ViewData["SomeKey"] = someObject; 

あなたが使用して同じことをしたい場合のViewData辞書作成することをラッピングを周りに提供し、それは少し冗長となりViewBag代わりに(もう少し読みやすい)あなたがそうのようなものを参照:

ViewBag.isAdmin = true;

し、それらを確認することができ、tyrongowerがそうのように、上述のように:

if (ViewBag.isAdmin) 
{ 
    // do stuff 
} 

私は通常、この構造体を使用するときにViewBag構文を使用しますが、実際には同じものを参照します。あなたが見る外のそうのような何かをしたのであれば:

ViewBag.isAdmin

またはその逆:

ViewData["isAdmin"] = true;

をあなたがそう傾いた場合には、このようにそれを参照することができます。

概念のちょっと詳細です。

関連する問題