c# - 如何枚举 MVC 5 viewbag

标签 c# asp.net-mvc

似乎 viewbag 是 System.Web.Mvc.DynamicViewDataDictionary 的一个实例。这是内部的,所以我不能将 ViewBag 转换到它。并且该类型不公开 IDictionary 接口(interface)(cf ExpandoObject)

那我该怎么做

foreach(var kv in <ViewBag magic>)
{
   .....
}

我看到 System.Web.Mvc.DynamicViewDataDictionary 有一个 Keys 方法,但这没有帮助,因为我无法动态获取动态对象值。即我做不到

var k = "Key1";
var v = ViewBag[k]; 

最佳答案

ViewData属性(property)——一个 ViewDataDictionary -- 将包含与 ViewBag 相同的数据( ViewBag 基本上是 ViewData 的包装)。

A ViewDataDictionary是一个可以迭代的结构(它实现了 IDictionary<string, object> 和各种 IEnumerable s):

foreach (KeyValuePair<string, object> kvp in ViewData)
{

}

有很多方法可以投ExpandoObject s 至 IDictionary<string, object> s 但你基本上还在同一条船上,因为你需要知道你正在使用什么类型来从 object 中转换它们一些有用的东西。

关于c# - 如何枚举 MVC 5 viewbag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29929801/

相关文章:

c# - 在GAC中注册新程序集后,Visual Studio找不到任何dll

c# - ASP.NET WebAPI + Soap

c# - MVC 4 - 构建访问 ViewData 的 Helper

c# - MVC4 局部 View 错误 "Object reference not set to an instance of an object."

c# - Visual Studio 浏览器与 Parallels 主机操作系统的链接

c# - Xamarin 无法解析 system.security.cryptography?

c# - protobuf-net [反] 跨程序集边界序列化

c# - 如何在 asp.net mvc 中选择一个选择列表项?

asp.net-mvc - "You do not have permission to view this directory or page."仅在 Azure 上切换到生产环境后才出现错误

c# - 为什么 DataType.Password 只在服务器端验证?