103

ASP.NET MVC はどのように機能しますViewBagか? MSDN によると、それはObjectただの.ViewBag.FooViewBag["Hello"]

また、作成して ASP.NET WebForms アプリで使用するにはどうすればよいですか?

例をいただければ幸いです。

4

7 に答える 7

33

これは動的オブジェクトです。つまり、コントローラーでプロパティを追加し、後でビューでそれらを読み取ることができます。動的タイプの機能であるオブジェクトを基本的に作成しているためです。ダイナミクスに関するこのMSDN の記事を参照してください。MVC に関連する使用法については、この記事を参照 してください。

これを Web フォームに使用する場合は、次のように動的プロパティを基本ページ クラスに追加します。

public class BasePage : Page
{

    public dynamic ViewBagProperty
    {
        get;
        set;
    }
}

これをすべてのページに継承させます。ASP.NET マークアップで、次のことができるはずです。

<%= ViewBagProperty.X %>

それはうまくいくはずです。そうでない場合は、回避する方法があります。

于 2013-02-15T13:43:48.067 に答える
8

ViewBagSystem.Dynamic.ExpandoObject提案どおりです。のプロパティViewBagは基本的にKeyValueペアであり、キーによって値にアクセスします。この意味で、これらは同等です。

ViewBag.Foo = "Bar";
ViewBag["Foo"] = "Bar";
于 2013-02-15T13:42:45.467 に答える
3

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 は、コントローラーのアクションとそれがレンダリングするビューの間でデータを渡すために使用されます。

于 2013-02-15T13:52:42.097 に答える
-1
public dynamic ViewBag
{
    get
    {
        if (_viewBag == null)
        {
            _viewBag = new DynamicViewData(() => ViewData);
        }

        return _viewBag;
    }
}
于 2016-12-28T06:11:35.257 に答える