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

SportクラスのSportsGroupsプロパティの背後にあるコレクションインスタンスをインスタンス化していない可能性があります。コンストラクター/初期化を確認してください。

于 2012-08-25T11:40:50.270 に答える
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 に答える