ASP.NET MVC はどのように機能しますViewBag
か? MSDN によると、それはObject
ただの.ViewBag.Foo
ViewBag["Hello"]
また、作成して ASP.NET WebForms アプリで使用するにはどうすればよいですか?
例をいただければ幸いです。
ASP.NET MVC はどのように機能しますViewBag
か? MSDN によると、それはObject
ただの.ViewBag.Foo
ViewBag["Hello"]
また、作成して ASP.NET WebForms アプリで使用するにはどうすればよいですか?
例をいただければ幸いです。
これは動的オブジェクトです。つまり、コントローラーでプロパティを追加し、後でビューでそれらを読み取ることができます。動的タイプの機能であるオブジェクトを基本的に作成しているためです。ダイナミクスに関するこのMSDN の記事を参照してください。MVC に関連する使用法については、この記事を参照 してください。
これを Web フォームに使用する場合は、次のように動的プロパティを基本ページ クラスに追加します。
public class BasePage : Page
{
public dynamic ViewBagProperty
{
get;
set;
}
}
これをすべてのページに継承させます。ASP.NET マークアップで、次のことができるはずです。
<%= ViewBagProperty.X %>
それはうまくいくはずです。そうでない場合は、回避する方法があります。
はViewBag
、System.Dynamic.ExpandoObject
提案どおりです。のプロパティViewBag
は基本的にKeyValue
ペアであり、キーによって値にアクセスします。この意味で、これらは同等です。
ViewBag.Foo = "Bar";
ViewBag["Foo"] = "Bar";
ViewBag は動的タイプです。もっと、あなたはできませんViewBag["Foo"]
。例外が発生します - Cannot apply indexing with [] to an expression of type 'System.Dynamic.DynamicObject'。
の内部実装はViewBag
実際に Foo をViewData["Foo"]
(ViewDataDictionary の型) に格納するため、これら 2 つは交換可能です。ViewData["Foo"]
とViewBag.Foo
。
そしてスコープ。ViewBag と ViewData は、コントローラーのアクションとそれがレンダリングするビューの間でデータを渡すために使用されます。
public dynamic ViewBag
{
get
{
if (_viewBag == null)
{
_viewBag = new DynamicViewData(() => ViewData);
}
return _viewBag;
}
}