2012-08-25 144 views
4

我認爲這將是一件容易的事,但我現在已經掙扎了一段時間了。處理MVC組合框值

我有Sport對象屬於一些SportGroup對象。

我想表示一個組合框裏面組,我創建SportViewModel.cs具有以下屬性

​​

HTTPGET創建行動

SportViewModel newSport = new SportViewModel(); 
newSport.SportGroups = new SelectList(GetAllSportGroups(), "Id", "Name"); 

//GetAllSportGroups() returns list of SportGroups domain objects as you can imagine. 

我創建視圖看起來像這樣

@model Models.SportViewModel 
<div>Sport group</div> 
<div>@Html.DropDownListFor(x => x.SportGroupId, Model.SportGroups)</div> 

現在在控制器的httpPost行動我收到數據並嘗試將其保存:

[HttpPost] 
public ActionResult Create(SportViewModel newSport) 
{ 
    // if model state is valid and other checking omitted 
    // session and transaction omitted 
    Sport sport = new Sport(); 
    sport.Id = newSport.Id; 
    sport.Name = newSport.Name; 
    SportGroup sportGroup = session.Load<SportGroup>(SportGroupId); 
    sport.SportGroups.Add(sportGroup); // here is where I'm getting an error 
} 

提交後,我得到這些錯誤

對象引用不設置到對象的實例。
引用線sport.SportGroups.Add(sportGroup);

請幫助。 謝謝

+0

類型的新對象,所有包含的集合等也initalized和實例session.Load (SportGroupId);正確填充了SportGroup對象。 – Grunf

+0

是的確 - 但運動對象上的'.SportGroups'屬性怎麼樣? –

回答

2

試試這個:

// if model state is valid and other checking omitted 
// session and transaction omitted 
Sport sport = new Sport(); 

if(sport.SportGroups != null) 
{ 
    // everything OK ! 
} 
else 
{ 
    // you need to instantiate the .SportGroups property! 
    sport.SportGroups = new .........(); 
} 

因爲否則:

sport.SportGroups.Add(sportGroup); // here is where I'm getting an error 
    ************* 

如果.SportGroups屬性是正確實例化,這將是NULL,你不能在它調用.Add()!你會得到你的確切例外。

這是典型的東西,你會在Sport類的構造函數做最好 - 確保當你在調試SportGroup sportGroup =創建Sport

2

您可能沒有實例化一個位於Sport類的SportsGroups屬性後面的集合實例。檢查它的構造函數/初始化。