Ani*_*nge 96 asp.net asp.net-mvc viewbag
ASP.NET MVC是如何ViewBag工作的?MSDN说它只是一个Object引起我兴趣的,"魔法"属性如ViewBag.Foo魔法字符串ViewBag["Hello"]实际上是如何工作的?
另外,我如何制作一个并在我的ASP.NET WebForms应用程序中使用它?
实例真的很感激!
Ani*_*nge 88
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ins 32
它是一个动态对象,这意味着您可以在控制器中为其添加属性,并在视图中稍后读取它们,因为您实际上是在创建对象,这是动态类型的一个特性.请参阅此MSDN关于动态的文章.请参阅 此文章,了解它与MVC相关的用法.
如果要将其用于Web表单,请将动态属性添加到基页类,如下所示:
public class BasePage : Page
{
public dynamic ViewBagProperty
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
让您的所有页面都继承自己.您应该能够在ASP.NET标记中执行以下操作:
<%= ViewBagProperty.X %>
Run Code Online (Sandbox Code Playgroud)
这应该工作.如果没有,有办法解决它.
这ViewBag是System.Dynamic.ExpandoObject建议的.其中的属性ViewBag基本上是KeyValue对,您可以通过键访问该值.在这个意义上,这些是等价的:
ViewBag.Foo = "Bar";
ViewBag["Foo"] = "Bar";
Run Code Online (Sandbox Code Playgroud)
ViewBag用于从Controller Action传递数据以查看以呈现正在传递的数据。现在,您可以使用ViewBag或ViewData在Controller Action和View之间传递数据。ViewBag:这是动态对象的类型,这意味着您可以向Viewbag动态添加新字段,并在View中访问这些字段。创建新字段时,您需要初始化viewbag的对象。
例如:1.创建ViewBag:ViewBag.FirstName =“ John”;
| 归档时间: |
|
| 查看次数: |
115578 次 |
| 最近记录: |