4

我认为这将是一件容易的事,但我现在已经挣扎了一段时间。

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

请帮忙。谢谢

4

2 回答 2

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类的构造函数中执行的操作 - 确保在创建类型的新对象时所有包含的集合等也被初始化和实例化Sport

于 2012-08-25T11:56:42.827 回答
2

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

于 2012-08-25T11:40:50.270 回答