1. ホーム
  2. asp.net

[解決済み] ASP.NET MVCのViewBagのしくみ

2023-01-02 10:48:55

質問

ASP.NET MVCの ViewBag はどのように機能するのでしょうか。MSDN によると、これは単なる Object のようなプロパティはどのように動作するのでしょうか? ViewBag.Foo やマジックストリング ViewBag["Hello"] は実際に機能するのか?

また、どのように作ってASP.NET WebFormsアプリで使用することができますか?

例は本当にありがたいです!

どのように解決するのですか?

ViewBag は、タイプ dynamic 型ですが、内部的には System.Dynamic.ExpandoObject()

というように宣言されています。

dynamic ViewBag = new System.Dynamic.ExpandoObject();

ということで、:

ViewBag.Foo = "Bar";

エクスパンダーのオブジェクトコードの例です。

public class ExpanderObject : DynamicObject, IDynamicMetaObjectProvider
{
    public Dictionary<string, object> objectDictionary;

    public ExpanderObject()
    {
        objectDictionary = new Dictionary<string, object>();
    }
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        object val;
        if (objectDictionary.TryGetValue(binder.Name, out val))
        {
            result = val;
            return true;
        }
        result = null;
        return false;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        try
        {
            objectDictionary[binder.Name] = value;
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }
}