Razor エンジンとエンティティ フレームワークを使用する MVC4 Web アプリケーションでは、html ヘルパー @Html.EditorForModel で使用するテンプレートを作成して、他のテーブルへのリンクを持つエンティティをより適切に表示することができます。
私が取り組んでいる例は、2 つの DBSets、地域と学校を含む DbContext です。多くの地域があり、1 つの学校が 1 つの地域に属している場合があります。理想的には、学校のエディターに選択する地域のドロップダウンを表示してもらいたいです。@Html.EditorForModel ヘルパーを呼び出すだけでフォームが一度に生成され、後で地域や学校のテーブルに変更を加えることができるように、十分に汎用的なテンプレートを作成したいと思います。変更を加えなくても編集フォームに反映されるようにします。
いくつかのコード:
public class MyContext : DbContext
{
public MyContext ()
: base("DefaultConnection")
{
}
public DbSet<Region> Regions { get; set; }
public DbSet<School> Schools { get; set; }
[Table("Regions")]
public class Region
{
public Region()
{
Schools = new List<School>();
}
[Key]
public int RegionId { get; set; }
[StringLength(256)]
public string RegionName { get; set; }
public ICollection<School> Schools { get; set; }
}
[Table("Schools")]
public class School
{
public School() { }
[Key]
public int SchoolId { get; set; }
[StringLength(256)]
public string SchoolName { get; set; }
[ForeignKey("Region")]
public int RegionId { get; set; }
public virtual Region Region { get; set; }
}
}
ビューモデルとして地域または学校のいずれかを渡すことができるという考えで、エディターフォームを表示するための部分ビューを作成しました。
@model object
@using (Html.BeginForm())
{
@Html.ValidationSummary("Broken stuff:")
@Html.EditorForModel()
}
これが可能かどうかはわかりませんが、新しいテンプレートでエンティティのプロパティをループして、リンクされたテーブルがあるかどうかを検出し (たとえば、学校に地域が含まれている)、ドロップダウンに地域のリストを表示することを本当に望んでいます。 .