2012-11-15 52 views
2

當試圖循環查看從控制器返回的數據時,出現錯誤「'對象'不包含'CustomerID'的定義,並且沒有擴展方法「的CustomerID」接受型「對象」的第一個參數可以發現」循環通過從ASP.NET MVC控制器返回的數據的問題

這是我的視圖

<% using (Html.BeginForm()) {%> 

    <%foreach (var item in (IEnumerable)Model) 
     { %> 
     <%= Html.Encode(item.CustomerID) %> 

    <%} %> 

<% } %> 

這裏是控制器:

public ActionResult Index() 
     { 
      Models.NorthwindDataContext nw = new Models.NorthwindDataContext(); 

      var qry = from ord in nw.Orders 
       join cust in nw.Customers on ord.CustomerID equals cust.CustomerID 
       select new Models.OrdersModel 
         { 
          CustomerID = ord.CustomerID, 
          OrderID = ord.OrderID,       
          OrderDate = ord.OrderDate.Value, 
          ShipCountry = ord.ShipCountry 
         }; 
      var ordrs = qry.ToList(); 
          return View(ordrs); 

     } 

和這裏是我的課

public class OrdersModel 
    { 
     [Required] 
     [Display(Name = "OrderID")] 
     public int OrderID { get; set; } 

     [Required] 
     [Display(Name = "OrderDate")] 
     public DateTime OrderDate { get; set; } 

     [Required] 
     [Display(Name = "CustomerID")] 
     public string CustomerID { get; set; } 

     [Display(Name = "ShipCountry")] 
     public string ShipCountry { get; set; } 
    } 
+0

嘗試<%:Html.DisplayFor(modelItem => item.CustomerID)%> – chrislhardin

+0

您可以顯示更多的aspx文件,它定義了模型類型嗎? – JDPeckham

+0

您的視圖中是否有模型聲明?例如@model List 這樣foreach(var(IEnumerable)Model中的項)知道模型實際是什麼?並且該foreach應該是foreach(模型中的var項) –

回答

2
<%foreach (var item in (IEnumerable<OrdersModel>)Model) 
     { %> 
     <%= Html.Encode(item.CustomerID) %> 

    <%} %> 

CustomerID還沒有啓動,因爲你不給你投IEnumerable提供了一個類型。

.NET盡其所能並將每個項目視爲object,它不包含CustomerID屬性。

編輯:

由Jan的評論的鼓舞,這是我真正去了解它的方式。

創建一個更好的模型,其中Orders是視圖模型的一個屬性。

public class OrderListVM 
{ 
    public List<OrdersModel> Orders { get; set; } 

    // The benefit of using this model is you can include extra stuff here. 
} 

然後在你的控制器: -

var vm = new OrderListVM { Orders = qry.ToList() }; 

return View(vm); 

正如揚說,要確保該視圖強類型,並準備接受OrdersListVM作爲其類型。

您可以通過查看.aspx頁面中的頁面指令來檢查此問題。

<%@ Page Title="" 
    Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<YourNameSpace.OrderListVM>" %> 

最後,改變您的標記: -

<%foreach (var item in Model.Orders) 
     { %> 
     <%= Html.Encode(item.CustomerID) %> 

    <%} %> 

一切都會有正確的類型,如果你需要從訂單的裸露列表把任何東西在你的看法之餘,你有一個容器來放置它。

+3

在強類型視圖中指定模型的類型會更好 – Jan

+0

現在,我收到一條錯誤消息「傳入字典的模型項目類型爲'System .Collections.Generic.List'1 [MvcNorthwind.Models.OrdersModel]',但是這個字典需要一個'MvcNorthwind.Models.OrdersModel'類型的模型項目。「 – ElenaDBA

+0

@ElenaDBA - 你能顯示你的更新代碼嗎? –

相關問題