基本的に、 Ownerの詳細を含むビューが必要です。Ownerは複数のタイプのVehicleを持つことができ (またはなし)、チェックボックスで選択できます。
送信時に、データベースを更新する必要があります。これは、次に所有者がビューに表示されるときに、所有者の正しいチェックボックスがオンになっている必要があるためです。
EF モデルを構築する方法がわかりません。また、EF モデルを正しくリンクして目的の結果が得られるかどうかもわかりません。
膨大な数の車両が存在するため、 Vehicleの種類をフィールドとしてOwnerオブジェクトにハードコーディングしたくありません。
これらのモデルをリンクする方法の正しい方向を教えてもらえますか? データベースに 2 つまたは 3 つのテーブルが必要ですか?
これは私が現時点で持っているものですが、おそらく間違っています。アイデアがある場合は、混乱を避けるために今すぐ読むのをやめてください。 どんなコメントでも大歓迎です!
モデル:
public class Vehicle
{
public int VehicleID { get; set; }
public string Name { get; set; }
}
public class Owner
{
public int OwnerID { get; set; }
public string Name { get; set; }
public virtual ICollection<OwnerVehicle> OwnerVehicles { get; set; }
}
public class OwnerVehicle
{
public int OwnerVehicleID { get; set; }
public bool Ticked { get; set; }
//Not sure if this is needed, because ticked will always be true
//I delete OwnerVehicle if not needed
public int OwnerID { get; set; }
public virtual Owner Owner { get; set; }
public int VehicleID { get; set; }
public virtual Vehicle Vehicle { get; set; }
}
コントローラー:
public ActionResult Index()
{
//prepopulate Owner objects on the fly for this example, in my project it would fetched/created with EF into database
Owner owner = getOwner();
return View(owner); // we return the owner to view
}
public Owner getOwner()
{
//Create a owner
Owner owner = new Owner() { OwnerID = 1, Name = "JACK" };
//Create a list of vehicles
List<Vehicle> Vehicles = new List<Vehicle>();
Vehicles.Add(new Vehicle() { VehicleID = 1, Name = "I have a car"});
Vehicles.Add(new Vehicle() {VehicleID = 1, Name = "I have a bike" });
//the owner doesnt have any vehicles yet, therefor object OwnerVehicle is null at the moment
return owner;
}
[HttpPost]
public ActionResult Index(Owner owner)
{
//at this point, the owner needs have his list of Vehicles linked, and written to database
//
//ToDO
//return View();
}
私が迷っているので、以下のビューはコンパイルされません。
インデックス.cshtml
@model Owner
@using (Html.BeginForm())
{
<div class="editor-field">
@Html.EditorFor(model => model.OwnerVehicles)
</div>
}
EditorTemplates/OwnerVehicles.cshtml
@model OwnerVehicle
<div>
@Html.CheckBoxFor(x => x.Ticked)
@Html.LabelFor(x => x.TODO, Model.TODO)
@Html.HiddenFor(x => x.TODO)
</div>