Viewbag RuntimeBinderException:’object’不包含定义
如何通过ViewBag
解决此错误将数据传递给视图?
System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的exception,但未在用户代码中处理
附加信息:’object’不包含’name’的定义
在控制器中
var linq = (from c in db.Catogeries join a in db.Articals on c.Id equals a.CatogeryId select new {name=c.Name,title=a.Title }); ViewBag.data = linq;
在视图中
@{ foreach (var item in ViewBag.data ) { @item.name
} }
修复此错误的最简单方法是创建类而不是使用匿名对象并使用强类型模型。
var linq = (from c in db.Catogeries join a in db.Articals on c.Id equals a.CatogeryId select new MyCategory { name=c.Name, title=a.Title }); ViewBag.data = linq;
在View
:
foreach (var item in (IEnumerable)ViewBag.data ) { @item.name
}
如果您坚持使用dynamic
,可以查看以下问题:
Razor中的动态匿名类型导致RuntimeBinderException
在ASP.NET MVC 3中执行动态视图模型的最简单方法
问题实际上是由设置Viewbag
值引起的。 在此过程中,.NET始终抛出内部exception,然后Visual Studio进入调试器。
解决方案:仅针对您自己的代码中的exception使Visual Studio中断。 转到菜单工具/选项,选择左侧的调试,然后选择[v]选项“启用我的代码”。
这是我如何解决我的问题,我希望这可以帮助某人:
我创建了一个类:
public class MyClass { public decimal EmployeeId { get; set; } public string CategoryCode { get; set; } public string CategoryDesc { get; set; } } }
在控制器:
var query = (from c in context.EmployeeCategory where(c.EMPLOYEE_ID == 22) join a in context.Categories on c.Category_CODE equals a.Category_CODE select new MyClass { EmployeeId = c.EMPLOYEE_ID, CategoryCode = a.Category_CODE, CategoryDesc = a.Category_DESC }); return View(query);
在视图:
@model IEnumerable @foreach (var item in Model) { @item.EmployeeId - @item.CategoryCode
@item.CategoryDesc
}
你只需要施展它。 该视图不知道该对象是什么类型,因此在您投射它之前尝试枚举它将无法工作。 就像是:
foreach (var item in (IEnumerable ) ViewBag.data) { ... }
很抱歉,如果格式略有偏差,请尝试在手机上执行此操作。