我认为这将是一项轻松的任务,但我现在已经挣扎了一段时间。
我有一个属于某个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);
请帮忙。 感谢
答案 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>