2014-02-23 59 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 /> 
} 
相關問題