【发布时间】:2015-02-06 10:42:14
【问题描述】:
我正在尝试将动态结果从 Controller 传递给 View,方法 ShowColor 返回动态结果。在视图中,我尝试遍历集合,但出现错误
“object”不包含“ColorID”的定义。
我在控制器和视图中有以下代码
public class myColor
{
public int ID { get; set; }
public string Name { get; set; }
public string Like { get; set; }
}
public dynamic ShowColor()
{
IList<myColor> color = new List<myColor>();
color.Add(new myColor { ID = 1, Name = "Red", Like = "***" });
color.Add(new myColor { ID = 2, Name = "Green", Like = "*****" });
color.Add(new myColor { ID = 3, Name = "Blue", Like = "**" });
color.Add(new myColor { ID = 4, Name = "Yellow", Like = "*" });
var select = (from c in color
select new
{
ColorID = c.ID,
ColorName = c.Name
}).ToList();
return select;
}
public ActionResult DBDynamic()
{
return View(ShowColor());
}
查看
@model dynamic
@{
ViewBag.Title = "DBDynamic";
}
<h2>DBDynamic</h2>
<p>
<ul>
@foreach (var m in Model)
{
<li> @m.ColorID</li>
}
</ul>
</p>
public static ExpandoObject ToExpando(this object anonymousObject)
{
IDictionary<string, object> expando = new ExpandoObject();
foreach (PropertyDescriptor propertyDescriptor in TypeDescriptor.GetProperties(anonymousObject))
{
var obj = propertyDescriptor.GetValue(anonymousObject);
expando.Add(propertyDescriptor.Name, obj);
}
return (ExpandoObject)expando;
}
然后这样称呼它
var select = (from c in color
select new
{
ColorID = c.ID,
ColorName = c.Name
})
.AsEnumerable()
.Select(x => x.ToExpando());
return View(select);
【问题讨论】:
-
在您的剃刀视图中放置一个断点,看看您的结果是什么。
-
我在帖子底部添加了一个调试图像。
-
这个问题你解决了吗?刚遇到类似的问题,看看有没有思路。
-
我终于解决了我的问题,但我们的场景之间的区别是你在一些 Linq Express 中使用匿名类,而我使用 JSON 对象
-
是的,我也达到了相同的解决方案,我认为最好的方法是避免在模型中使用动态类型而不是使用 ViewModel,但在某些情况下 JSON 结果可能很有用。
标签: asp.net-mvc razor dynamic view asp.net-mvc-5