2014-02-23 43 views
4

如何解决这个错误通过ViewBag传递数据到视图?Viewbag RuntimeBinderException:'object'不包含定义

类型“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”的一个例外发生在System.Core.dll但在用户代码中没有处理

其他信息:“对象”不包含“的定义名称”

在控制器

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

您可以尝试使用自定义类而不是匿名。 '新的CategoryModel {name = c.Name,title = a.Title}' –

+0

停止使用ViewBag传递模型。使用模型来传递信息。 HTTP://tech.trailmax。info/2013/12/asp-net-mvc-viewbag-is-bad/ – trailmax

回答

1

你只需要施放它。该视图不知道对象是什么类型,所以试图枚举它将不会工作,直到你投它。例如:

foreach (var item in (IEnumerable <dynamic>) ViewBag.data) { ... } 

对不起,如果格式稍微关闭,试图在手机上做到这一点。

+0

没有帮助。本地有相同的错误。 –

+0

出现相同的错误:( – user3234114

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

Simplest Way To Do Dynamic View Models in ASP.NET MVC 3

+0

无需投给'(IEnumerable )' –

+0

是创建视图模型类是解决方案和[这里](http://stackoverflow.com/questions/7652749/object-does-not -contain-a-definition-for-x)是另一个被接受的答案,它帮助了我。 – stom

1

的问题是行为通过设置Viewbag值引起的。在这个过程中,.NET总是抛出一个内部异常,然后Visual Studio进入调试器。

解决方案:使得Visual Studio只在中有例外,您自己的代码。 转到菜单工具/选项,选择左边的调试,并选中[v]选项“启用我的代码”。

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 /> 
} 
相关问题