首页新闻找找看学习计划

ASP.NET MVC3 返回动态类型(dynamic)视图取值问题

1
悬赏园豆:40 [已解决问题] 解决于 2012-11-08 17:29
public ActionResult Day()
{ 
var q = from o in _db.Orders
group o by o.OrderState
into g
select new {g.Key, Count = g.Sum(o => o.Id)};

return View(q);
}

以是有控制器中的代码,视图层:

 @foreach (var item in Model)
    {
          <td>@item.Key</td>
     }

异常:object”未包含“Key”的定义,但是直接显示@item的话会显示{Key=ABC,Count=12}.求解

ChixTech的主页 ChixTech | 初学一级 | 园豆:171
提问于:2012-11-08 16:26
< >
分享
最佳答案
0

你如果select new xxModel{

key=g.key

count=g.sum(o=>o.id)

}

页面直接

@Model.key就行了

收获园豆:32
学学学习 | 菜鸟二级 |园豆:427 | 2012-11-08 16:32

这个我明白!但是定义了一个新类!从理论上来说!我为了在页面显示某项组合数据,去定义一个类!不是我想要的,dynamic 动态类型可以实现!在ASP.NET MVC中貌似存在这个问题!我以为ASP.NET MVC 3里不会存在!看来我错了!

ChixTech | 园豆:171 (初学一级) | 2012-11-08 17:05
其他回答(7)
1

因為 你 是object類型哦。你可以定義一個類。處理哦

收获园豆:2
無限遐想 | 园豆:3740 (老鸟四级) | 2012-11-08 16:39

 我就是想用 dynamic 不想在定义一个新类!

支持(0) 反对(0) ChixTech | 园豆:171 (初学一级) | 2012-11-08 17:00
1

可以用new KeyValuePaire<string,int>

收获园豆:2
向往-SONG | 园豆:4853 (老鸟四级) | 2012-11-08 16:53

如果我 select(Field=g.Key, Field2 = g.Sum(o => o.Id),Field3=....)这样多个字段呢?就是不想在定义一个类!想用动态类!

支持(0) 反对(0) ChixTech | 园豆:171 (初学一级) | 2012-11-08 17:02

@bdqlaccp: 

return View(ToDic(q));

ToDic方法:用反射取出属性和值放到字典里

@item["xx"]来使用
支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-11-08 17:08
0

再定义一个类型吧。 

收获园豆:2
sym_cn | 园豆:798 (小虾三级) | 2012-11-08 16:58

 我就是想用dynamic 不想在定义一个新类!

支持(0) 反对(0) ChixTech | 园豆:171 (初学一级) | 2012-11-08 17:00

@bdqlaccp: 

网上说在foreach这个里面这样写就行了,你试下,我没试过

item.GetType().GetProperty("Key").GetValue(item,null)

支持(2) 反对(0) 学学学习 | 园豆:427 (菜鸟二级) | 2012-11-08 17:06

@学学学习: 嗯 试一下楼上的 应该没问题  不过这样的话。。不建议   反射效能很差哦

支持(0) 反对(0) sym_cn | 园豆:798 (小虾三级) | 2012-11-08 17:11

@学学学习: 此方法确实可以!以前知道这个问题!我以为ASP.NET MVC3 行了!结果还是不行,以前看老赵的这篇文章知道原委 http://kb.cnblogs.com/page/114467/ 

谢谢各位

支持(0) 反对(0) ChixTech | 园豆:171 (初学一级) | 2012-11-08 17:28

@ChixTech: 问下,我用mono.cecil那遍说明来,遇到 正由另一进程使用,因此该进程无法访问此文件 的问题,,不知有没有类型的解决办法

支持(0) 反对(0) 以函 | 园豆:212 (菜鸟二级) | 2017-07-14 21:39
0
ChixTech | 园豆:171 (初学一级) | 2012-11-08 17:10
0

mark

收获园豆:2
ms_water | 园豆:510 (小虾三级) | 2012-11-08 17:23
1

用dynamic变量,实例化一个ExpandoObject类型,就可以了

dynamic d = new ExpandoObject();

阿蛆 | 园豆:118 (初学一级) | 2013-01-07 16:08

这才是正解,今天刚好碰到这个问题

支持(0) 反对(0) huangsw | 园豆:200 (初学一级) | 2016-01-05 15:19

ExpandoObject 是不是添加属性,得一个一个添加,不像 dynamic o=new { p1="p1",p2="p2", p3="p3" };  似的,来得简洁,

支持(0) 反对(0) 以函 | 园豆:212 (菜鸟二级) | 2017-07-14 20:45
0

item.GetType().GetProperty("Key").GetValue(item,null) 这个有没更便捷的处理方式啊,求教

MiLong | 园豆:202 (菜鸟二级) | 2015-04-14 10:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册