こんにちは、Vehicle という基本クラスがあり、そこにはすべての車両に共通のすべてのプロパティがあり、Vehicle から派生してさらにプロパティを追加する Car、Jeep という複数の派生クラスがあります。
元:
public class Vehicle
{
public int Color { get; set; }
public double Cost { get; set; }
}
public class Car : Vehicle
{
public SelectListItem Option { get; set; }
}
このような車両のリストを持つ Page クラスがあります
public class Page
{
public List<Vehicle> vehicles { get; set; }
}
私のビューは Page クラスに強く型付けされているので、私のビューでは、このようなページに表示するためにすべての車両をループしています。このコードは @using(Html.BeginForm()) 内にあるため、ユーザーの選択をポストバックします
for(int i=0;i<Model.Vehicles.Count;i++)
{
<div id="Question">
@{
@Html.EditorFor(m => m.Vehicle[i], VehicleConstants.GetTemplateName(Model.Questions[i]));
}
<br />
</div>
}
車両の種類ごとに 1 つのエディター テンプレートを使用しているため、関数呼び出し VehicleConstants.GetTemplateName は、車両の種類に基づいて使用するテンプレートの名前を返すだけです。
このテンプレートは、単純に car クラスまたは Jeep クラス (派生クラス + 基本クラス) のプロパティを記述します。
私が抱えている問題は、フォームがポストバックされたときに、コントローラーの基本クラスの車両のプロパティにしかアクセスできないことです。サブクラスの車またはジープのプロパティの値を取得できません。
[HttpPost]
public string ReadPost(Page page)
{
}
フォームがポストバックされたときにこれらの値を自動バインドする最良の方法は何ですか?
カスタム バインダー クラスを作成することが唯一の選択肢ですか? 誰かがこれを行う方法についてサンプルコードを提供できますか? どんな助けでも大歓迎です。