Модель ASP.NET MVC разделена на несколько частичных представлений - PullRequest
1 голос
/ 29 января 2011

Я занимаюсь разработкой веб-приложения MVC 3 Razor, в котором хранятся сведения о нескольких категориях объектов.(Транспортные средства, дома, инструменты и т. Д.).Все объекты имеют общие данные (заголовок, описание и т. Д.) И некоторые детали, относящиеся к категории, к которой он принадлежит.Ожидается, что список категорий будет расти, и ввиду снижения удобства обслуживания мы надеемся использовать тот же мастер добавления объектов.Мастер основан на следующей реализации.

http://afana.me/post/create-wizard-in-aspnet-mvc-3.aspx

В процессе многоэтапного мастера последний шаг позволяет пользователю вводить специфические для категории сведения (модель, модель), VIN и т. Д. Для автомобиля).В настоящее время я представляю этот последний шаг как частичное представление с AJAX.Таким образом, на самом деле у нас будет несколько частичных представлений, которые отражают определенную категорию, но совместно используют остальную часть кода мастера.

Мой общий объект модели выглядит следующим образом:

public class AssetView
{
    [Required]      
    public string Title
     {
        get;
        set;
     }

    [Required]
    public string Description
    {
     get;
      set;
     }

    // Few more generic fields here

    public SpecificAsset AssetDetails { get; set; }
}

Комплексное свойство AssetDetailsпредставлен каждым типом частичного представления.Таким образом, PartialView «MotorDetails» будет содержать строго типизированную модель типа MotorAsset, которая объявлена, как показано ниже.

  public class MotorAsset : SpecificAsset
    {
        [Required]
        public string Transmission
        {
            get;
            set;
        }

        [Required]
        public string Make
        {
            get;
            set;
        }
     }

Фактическая проверка гораздо сложнее, но я ее опустил, чтобы ее было легче понять.

Страница главного мастера объявлена ​​как

    @model AssetView

  .....

  <div class="wizard-step">
     ....
  </div>
  <div class="wizard-step">
     ....
  </div>
  <div class="wizard-step">
      @{Html.RenderPartial("_MotorCreate", Model.AssetDetails);
  </div>

Частичное представление двигателя как

 @model MotorAsset

Мой вопрос заключается в том, как выполнить проверку модели в этом сценарии (илиэто возможно использовать), так как последний шаг не на странице просмотра, а на частичном представлении.

1 Ответ

0 голосов
/ 29 января 2011

Почему бы вам не прибегнуть к простому наследованию классов (парадигме ООП) вместо того, чтобы иметь свойство AssetDetails в AssetView?

Вместо того, что у вас есть, лучше объявить

AssetView (общие свойства) -> MotorView, наследующий AssetView (определенные свойства)

Пример:

public class AssetView {     
    [Required]           
    public string Title { get; set; }

    [Required]
    public string Description     { get; set; }      

    // Few more generic fields here
}

public class MotorView : AssetView {
    ...
}

@model MotorView    // you still have access to the AssetView's properties in your view and in your controller actions

Если вы хотите оставить все как есть, используйте EditorFor()и создайте шаблон EditorFor в папке Shared и введите его строго MotorAsset (или SpecificAsset, если хотите, чтобы он был еще более универсальным).

Затем выполните рендеринг следующим образом:

@Html.EditorFor(model=>model.AssetDetails)

Это позволит контроллеру проверить его и автоматически привязать к свойству в AssetView.НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...