C# Viewbag RuntimeBinderException:&x27;对象';不包含定义
如何通过C# Viewbag RuntimeBinderException:&x27;对象';不包含定义,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,如何通过ViewBag将数据传递给视图来解决此错误 System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理 其他信息:“对象”不包含“名称”的定义 内部控制器 var linq = (from c in db.Catogeries join a in db.Articals on c.Id equals a.CatogeryId
ViewBag
将数据传递给视图来解决此错误
System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理
其他信息:“对象”不包含“名称”的定义
内部控制器
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>
}
}
@{
foreach(ViewBag.data中的var项)
{
@item.name
}
}
您只需将其强制转换即可。视图不知道对象是什么类型的,所以在您强制转换它之前,尝试枚举它是不起作用的。比如:
foreach (var item in (IEnumerable <dynamic>) ViewBag.data) { ... }
foreach(在(IEnumerable)ViewBag.data中的变量项){…}
抱歉,如果格式稍微关闭,请尝试在电话上执行此操作 修复此错误的最简单方法是创建类,而不是使用匿名对象和强类型模型
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;
在视图中
:
foreach (var item in (IEnumerable<MyCategory>)ViewBag.data )
{
<p>@item.name</p>
}
foreach(IEnumerable)ViewBag.data中的变量项)
{
@item.name
}
如果您坚持使用dynamic
,您可以查看以下问题:
问题实际上是由设置
Viewbag
值引起的。在这个过程中,.NET总是抛出一个内部异常,然后VisualStudio进入调试器
解决方案:仅针对您自己代码中的异常使Visual Studio中断。
转到“工具/选项”菜单,选择左侧的“调试”,并选中“仅启用我的代码”选项。以下是我解决问题的方法,希望如此 可以帮助某人: 我创建了一个类:
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 />
}
@model IEnumerable
@foreach(模型中的var项目)
{
@item.EmployeeId-
@item.CategoryCode
@item.CategoryDesc
}
您可以尝试使用自定义类而不是匿名类newcategoryModel{name=c.name,title=a.title}
停止使用ViewBag传递模型。使用模型传递信息。是的,创建视图模型类是一个解决方案,也是一个公认的答案,它帮助了我。不,它对我不起作用。为了解决这个问题,我使用类工作表DTO将对象数据“ViewBag data”转换为像“foreach(IEnumerable)ViewBag.subCategories中的var项)”这样的强类型。