处理MVC组合框值

时间:2012-08-25 11:31:47

标签: c# asp.net-mvc

我认为这将是一项轻松的任务,但我现在已经挣扎了一段时间。

我有一个属于某个Sport对象的SportGroup对象。

我想在组合框中表示组,并使用以下属性创建SportViewModel.cs

public Guid Id {get; set;}
public string Name {get; set;}
public Guid? SportGroupId { get;set; }
public IEnumerable<SportGroup> SportGroups {get; set; }

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);

请帮忙。 感谢

2 个答案:

答案 0 :(得分:2)

您可能没有实例化Sport类的SportsGroups属性后面的集合实例。检查它的构造函数/初始化。

答案 1 :(得分: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属性 NOT 正确实例化,它将为NULL,您无法在其上调用.Add()!你会得到你所拥有的确切例外。

这通常是您最好在Sport类的构造函数中执行的操作 - 确保在创建类型为Sport的新对象时,所有包含的集合等也已初始化并实例化/ p>