Привязка модели ASP.NET MVC 3.0 к базовым и производным классам?

Привет всем! есть базовый класс с именем Vehicle, и у меня есть все свойства, общие для всех транспортных средств, и у меня есть несколько производных классов, называемых Car, Jeep, которые являются производными от Vehicle и добавляют дополнительные свойства

Ex:

    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>
 }

Я использую один шаблон редактора для каждого типа транспортного средства, поэтому вызов функции VehicleConstants.GetTemplateName просто возвращает имя используемого шаблона в зависимости от типа транспортного средства

Этот шаблон просто записывает свойства класса автомобиля или класса джипа (De класс rived + базовый класс)

Проблема, с которой я сталкиваюсь, заключается в том, что когда форма отправляется обратно, я могу получить доступ только к свойствам транспортного средства базового класса в своем контроллере. Я не могу получить значение для свойств автомобиля подкласса или джипа.

        [HttpPost]
    public string ReadPost(Page page)
    {
    }

Как лучше всего автоматически связать эти значения при отправке формы?

Является ли единственным вариантом создание пользовательского класса подшивки?Может ли кто-нибудь предоставить мне пример кода, как это сделать? Любая помощь очень ценится.

6
задан tereško 13 July 2012 в 06:17
поделиться