オブジェクトを受け取るASP.NET MVCアプリケーションでフォームを設計しています。フォームから来るLINQモデルを更新する最良の方法
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, Person person)
{
peopleService.SavePerson(person);
return Redirect("~/People/Index");
}
サービスでSavePerson
コールがこのん:リポジトリ内
public void SavePerson(Person person)
{
_peopleRepository.SavePerson(person);
}
そしてSavePerson
コールがこれを行う:
public void SavePerson(Person person)
{
using (var dc = new SIGAPDataContext())
{
if (person.IsNew)
{
dc.People.InsertOnSubmit(person);
}
else
{
dc.People.Attach(person, true);
}
dc.SubmitChanges();
}
}
ここでは、一般的な編集アクションは次のようになります。これは、新しいレコードを作成するときにうまく機能します。しかし、すべてのフォーム要素がなくても更新すると、他のフィールドはnullになります。たとえば、私のPersonモデルには、編集フォームに表示されていない場合はNULL値を持つNationalityIDプロパティがあります。
フォームからのフィールドのみでモデルを更新するにはどうすればよいですか?
Person persistedPerson = peopleService.GetPerson(person.ID);
persistedPerson.Name = person.Name;
persistedPerson.DateOfBirth = person.DateOfBirth
// etc...
それともこれを行うには、他の、きれいな方法があります:私は、最初のデータベースからレコードを取得し、それを手動などのプロパティです更新する必要がありますか?
ここでは、フォームのネストされたエンティティを操作するためにUpdateModelを使用する方法のみが必要です。どうもありがとう! – changelog
必要に応じて、別のホワイトリストと接頭辞を使用してサブモデルとして更新します。 – tvanfosson
この質問への私の答えを見てください:http://stackoverflow.com/questions/594412/model-binding-of-nested-properties-in-asp-net-mvc/594458#594458 – tvanfosson