Я пытаюсь реализовать основной опросник двигатель, который использует модель опросник, как показано ниже:MVC4 Generic Collection модель вопрос о POST
public class Questionnaire
{
public ICollection<Step> Steps { get; set; }
}
public class Step
{
ICollection<IQuestion> Questions { get; set; }
}
public class TextBoxQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
}
public class DropDownQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
public IList<string> Options { get; set; }
}
QuestionEditor шаблона:
@model IList<Models.IQuestion>
@for (int i = 0; i < @Model.Count(); i++)
{
@Html.EditorFor(x => x[i], @Model[i].QuestionType.ToString());
}
TextBoxQuestion Редактор:
public class TextBoxQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
}
Редактор DropDownQuestion:
public class DropDownQuestion : IQuestion
{
public QuestionTypeEnum QuestionType { get; set; }
public string QuestionText { get; set; }
}
Грубо следующие Jon Egerton's example here Я реализую общий ICollection интерфейса IQuestion. MVC интерпретирует каждый тип IQuestion по своему типу и соответствующим образом отображает шаблон редактора TextBoxQuestion или DropDownQuestion. Отлично.
Однако, когда модель вопросника возвращается к контроллеру, коллекции IQuestion являются нулевыми.
Может ли кто-нибудь помочь мне с советом о том, есть ли лучший подход или я могу подключить DependencyResolver или что-то еще, чтобы MVC мог интерпретировать объекты IQuestion как типы TextBoxQuestion и DropDownQuestion?
Надеюсь, что это разъяснение ясно, не стесняйтесь задавать любые вопросы.
спасибо всем заранее
Марк
ли вы следовать инструкциям из части 2 этой статьи? Без него связующее устройство по умолчанию не будет различать два конкретных типа, что означает, что оно вернет «null». –
Да реализована часть 2 с пользовательской функциональностью ModelBinder, но я понимаю, что только разрешает конкретный тип для пройденной модели, и мне нужно разрешить конкретные типы для дочерних элементов IQuestion. Может, я что-то упустил? – Mark