Asp.net

ASP.NET MVC 中的 ViewBag 是如何工作的

  • February 15, 2013

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;
       }
   }
}

引用自:https://stackoverflow.com/questions/14896013