2014-10-17 36 views
0

不工作我在我的控制器具有低於代碼:(IEnumerable的<SelectListItem>)ViewBag.Name在ASP.Net

var getAllModel = 
      VehicleManager.GetAllModelsByMakeId(getMakeId.MakeId) 
       .Select(c => new SelectListItem {Text = c.Name, Value = c.ModelId.ToString()}) 
       .ToList(); 
var getAllTrim = 
      VehicleManager.GetAllTrimByModelId(getModelId.ModelId) 
       .Select(c => new SelectListItem {Text = c.Name, Value = c.TrimId.ToString()}).ToList(); 

ViewBag.ModelName = getAllModel; 
ViewBag.TrimName= getAllTrim; 

,在我的網頁.cshtml也如下:

var trimName = (IEnumerable<SelectListItem>)ViewBag.ModelName; 
var modelName = (IEnumerable<SelectListItem>)ViewBag.TrimName; 

現在我想插入trimName.Insert(0, new SelectListItem {Text= "Select", Value = ""})但無法訪問。

這裏是我遇到的問題:Object reference not set to an instance of an object. 任何人有這樣的建議或解釋?

+0

未來是什麼問題? – 2014-10-17 15:36:03

+0

我將編輯與問題 – 2014-10-17 15:37:32

+0

問題看到我的帖子將有助於 – 2014-10-17 15:39:12

回答

0

使用List<T>,而不是作爲IEnumerable<T>IEnumerable<T>順序,從SO回答:

IEnumerable接口的目的是爲了讓消費者查看集合的內容。不要修改這些值。

var trimName = (List<SelectListItem>)ViewBag.ModelName; 
var modelName = (List<SelectListItem>)ViewBag.TrimName; 

看到這個SO post知道爲什麼你不能在IEnumerable<T>

+0

仍然是同一個問題 – 2014-10-17 15:40:48

+0

@JedMonsanto但爲什麼要追加值到您的數據裏面的視圖。 – meda 2014-10-17 15:41:56

+0

即使我應用在我的控制器中,我遇到了同樣的問題... – 2014-10-17 15:43:19

0

新增項目如果你唯一的目標是空項目添加到選擇列表,然後還有一個更簡單的方法。 Html.DropDownListFor需要一個參數設立一個空項目爲您提供:

@Html.DropDownListFor(m => m.TrimName, (IEnumerable<SelectListItem>)ViewBag.TrimNameChoices, "Select an Option...") 

而且,我改變了你ViewBag變量的名稱的通知。如果您的模型上的財產是TrimName,則無法將您的選擇列表存儲在ViewBag.TrimName中,否則它會摧毀任何選定的值。如果你打算使用ViewBag作爲選擇列表,那麼最好用ChoicesOptions來命名它們,這樣你就不用擔心這樣的衝突了。

+0

對不起,我解決了這個問題,通過將Class Bind更改爲某個列表之前聲明的問題。 – 2014-10-17 18:03:46

0

型號

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

控制器:

var getAllTrim = 
      VehicleManager.GetAllTrimByModelId(getModelId.ModelId) 
     .Select(c => new SelectListItem {Text = c.Name, Value = c.TrimId.ToString()}) 
     .ToList(); 

ViewBag.TrimList= getAllTrim; 

查看

@Html.DropDownListFor(model => model.TrimName, 
        (IEnumerable<SelectListItem>)ViewBag.TrimList, "-- Select --") 
+0

對不起,我解決了這個問題,通過改變類綁定到一個列表之前聲明的問題 – 2014-10-17 17:55:16

相關問題