2

ASP.NET MVC では、プロパティViewBagは動的タイプです。

コードを通じて、さまざまな「プロパティ」が次のViewBagように割り当てられます。

ViewBag.Message = "Hello world";
ViewBag.Title = "Page title";

これはどのように作動しますか?ドキュメントを読むと、ViewBagそれ自体は何でもできることがわかりますが、動的型の「メンバー」に何かを割り当てるのはなぜ(またはどのように)機能するのでしょうか?

クラスでの定義方法ViewBagは次のとおりです。public abstract class ControllerBase : IController

 [Dynamic]
 public dynamic ViewBag { get; }
 //
 // Summary:
 //     Gets or sets the dictionary for view data.
 //
 // Returns:
 //     The dictionary for the view data.
 public ViewDataDictionary ViewData { get; set; }

ちょっと興味があるんだけど。

関連する質問: DynamicViewDataDictionary の公式ドキュメントはどこにありますか?

4

2 に答える 2

4

ViewBagExpandoObjectまたは似たようなものです。これは基本的に、「プロパティ」がキーとなる美化された辞書です。

更新:
実際にはDynamicViewDataDictionary、ASP.NET MVC ソース コードの内部クラスです。このクラスは から継承されDynamicObject、単にのプロパティのViewDataDictionary周りViewBagののラッパーです。 とでわかるように、呼び出しはロジックなしで に委任されます。ViewDataControllerBase
TryGetMemberTrySetMemberViewData

于 2012-09-12T17:49:27.830 に答える
0

「Visual C# 2010 では、新しい型 dynamic が導入されました。型は静的型ですが、動的型のオブジェクトは静的型チェックをバイパスします。ほとんどの場合、型オブジェクトがあるように機能します。コンパイル時に、型指定された要素dynamic はすべての操作をサポートすると想定されているため、オブジェクトが COM API、IronPython などの動的言語、HTML ドキュメント オブジェクト モデル (DOM)、リフレクションから値を取得するかどうかを気にする必要はありません。 、またはプログラム内の別の場所から。ただし、コードが有効でない場合は、実行時にエラーがキャッチされます。」

http://msdn.microsoft.com/en-us/library/dd264736.aspx

于 2012-09-12T18:15:55.477 に答える