簡単だと思っていることをするのに助けが必要です。CodeFirst(CTP5)でASP.netMVC3を使用しています
会社と場所の2つのエンティティがあります。会社は多くの場所を作ることができます。クラスは次のとおりです(すべての不要な情報を取り除いた)
public class Company
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Location> Locations { get; set; }
}
public class Location
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public virtual Company Company { get; set; }
}
現在、私のコントローラーでは、会社のコンテキスト内での場所の作成のみを許可しているため、会社IDは常に渡されます(ビューでは、読み取り専用フィールドに会社の名前を表示しますが、ユーザーは許可しませんそれを変更/編集します。
public ActionResult Create(int companyId)
{
Company company = _session.Single<Company>(c => c.Id == companyId);
Location newLocation = new Location {Company = company};
return View(newLocation);
}
[HttpPost]
public ActionResult Create(Location location)
{
if (ModelState.IsValid)
{
_session.Add<Location>(location);
_session.CommitChanges();
return RedirectToAction("Index");
} else {
return View(location);
}
}
これで、新しい場所を作成しようとすると、location.Company.Nameが指定されておらず、Companyの必須フィールドであるため、ModelState.IsValidは常にfalseになります。私はここで新しい会社を作成しようとはしていません。正しい会社を参照して場所を作成しようとしているだけです。ModelStateを検証するためだけに、Nameプロパティをビューに追加したくありません。どうすればこれを簡単に達成できますか?ビューとは異なるものを渡す必要がありますか?またはビューに?