Частичное представление с использованием ViewModel, которая наследуется от другого класса, не работает - PullRequest
1 голос
/ 13 сентября 2011

У меня есть модель представления, которая отображает несколько форм на одной странице. Эта модель представления содержит 'sub-view-models' для каждой формы, которая будет отображаться. Каждая форма имеет свой собственный PartialView.

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

Элемент модели, переданный в словарь, имеет тип 'MyProject.ViewModels.JobForm', но этот словарь требуется типовой элемент типа 'MyProject.ViewModels.NightShiftForm'.

Главный вид

<%@ Control Language="C#"
  Inherits="ViewUserControl<MyProject.ViewModels.JobsViewModel>" %>

<%: Html.Partial("_NightShiftForm", Model.NightShiftForm) %>
<%: Html.Partial("_DayShiftForm", Model.DayShiftForm) %>

Частичное представление для '_NightShiftForm'

<%@ Control Language="C#"
  Inherits="ViewUserControl<MyProject.ViewModels.NightShiftForm>" %>

Просмотр классов моделей и форм

public class JobsViewModel {
  public NightShiftForm NightShiftForm { get; set; }
  public DayShiftForm DayShiftForm { get; set; }
}

public class JobForm {
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

public class DayShiftForm : JobForm {
  public string PreferredCoffeeBrand { get; set; }
  public bool IsMorningPerson { get; set; }
}

public class NightShiftForm : JobForm {
  public string PreferredLocation { get; set; }
  public string PreferredNights { get; set; }
}

Кто-нибудь знает, почему это может происходить?

1 Ответ

3 голосов
/ 14 сентября 2011

Оказывается, что MVC трудно передать нулевые значения в качестве параметра модели в Html.RenderPartial. Мое исправление выглядит следующим образом:

public class JobsViewModel {
  public NightShiftForm NightShiftForm { get; set; }
  public DayShiftForm DayShiftForm { get; set; }

  public JobsViewModel() {
    NightShiftForm = new NightShiftForm();
    DayShiftForm = new DayShiftForm();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...