如何通过ViewBag
解决此错误以将数据传递到视图?
System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理
其他信息:'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 )
{
<p>@item.name</p>
}
}
答案 0 :(得分:4)
最简单的方法来修复此错误,创建一个类而不是使用匿名对象并使用强类型模型。
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<MyCategory>)ViewBag.data )
{
<p>@item.name</p>
}
如果您坚持使用dynamic
,可以查看以下问题:
Dynamic Anonymous type in Razor causes RuntimeBinderException
答案 1 :(得分:1)
问题实际上是由设置Viewbag
值引起的。在这个过程中,.NET总是抛出一个内部异常,然后Visual Studio会进入调试器。
解决方案:仅针对您自己的代码中的异常使Visual Studio中断。 转到菜单工具/选项,选择左侧的调试,然后选择[v]选项&#34;启用我的代码&#34;。
答案 2 :(得分:1)
这是我如何解决我的问题,我希望如此 可以帮助别人:
我创建了一个类:
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<MyClass>
@foreach (var item in Model)
{
@item.EmployeeId <b> - </b>
@item.CategoryCode <br />
@item.CategoryDesc <br />
}
答案 3 :(得分:-2)
你只需要施展它。该视图不知道该对象是什么类型,因此在您投射它之前尝试枚举它将无法工作。类似的东西:
foreach (var item in (IEnumerable <dynamic>) ViewBag.data) { ... }
很抱歉,如果格式略有偏差,请尝试在手机上执行此操作。