【发布时间】:2011-10-03 18:45:00
【问题描述】:
您好,我尝试使用 ToExpando 解决方案在 razor 视图中使用匿名类。 我使用这个解决方案 -> Dynamic Anonymous type in Razor causes RuntimeBinderException
我会写我所做的:
-
我添加了一个文件 Extensions.cs 我在其中放置了以下代码:
public static class Extensions { public static ExpandoObject ToExpando(this object anonymousObject) { IDictionary<string, object> anonymousDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(anonymousObject); IDictionary<string, object> expando = new ExpandoObject(); foreach (var item in anonymousDictionary) expando.Add(item); return (ExpandoObject)expando; } } -
我在控制器方法中编写了一个从数据库接收元组的查询:
IEnumerable<dynamic> articles = (from p in db.Articles.Where(p => p.user_id == 2) select new { p.article_id, p.title, p.date, p.category, AverageScore = db.Articles_Scores .Where(o => o.user_id == p.user_id && p.article_id == o.article_id) .Average(m => m.score) }).AsEnumerable() .Select(r => r.ToExpando()); int ii = 0; foreach(var it in articles) { // HERE I CAN READ EVERYTHING ii = it.article_id; } return View(articles); -
在视图中我声明了一个模型:
@model IEnumerable<dynamic> -
我尝试获取每个元组:
@foreach (dynamic item in Model) { // some code @item.article_id // HERE IS EXCEPTION }
在 foreach 行中我遇到了异常:
RuntimeBinderException:“System.Dynamic.ExpandoObject”不包含“article_id”的定义
我做错了什么?
【问题讨论】:
-
你没有展示的是实际调用
ToExpando的代码。 -
对不起,我忘了。现在我更新了。
标签: asp.net-mvc linq entity-framework asp.net-mvc-3 razor