Очень просто.
Чтобы начать, посмотрите на папку шаблонов s в MVC, вы получите два типа DisplayTemplates и EditorTemplates.
Теперь они работаютТо же, что и в обычном режиме, но живут в специальных папках, например, с именами, указанными выше.
\Views\Home\Index.cshtml
\Views\Home\DisplayTemplates\MyViewModelName.cshtml
\Views\Home\EditorTemplates\MyViewModelName.cshtml
Вот как они работают.
Если вы создаете ProductDetailsViewModel
, как это:
public class ProductDetailsViewModel {
public IList<Question> Questions { get;set; }
}
A Question
может быть абстрактным классом, подобным этому:
public abstract class Question {
// .. maybe need some common properties here, like answer value?
}
Затем вы можете определить более конкретные вопросы, такие как:
public class TextQuestion : Question {
}
public class RadioQuestion : Question {
// maybe has a list of options for display etc.
}
Ии так далее.
Затем, скажем, используя вышеуказанную структуру в представлении you \ Home \ Index.cshtml, вы можете просто сделать следующее.
@using(Html.BeginForm())
{
<p>Put your form here</p>
@Html.TextboxFor(x=>x.ProductName)
@Html.EditorFor(x => x.Questions)
<input type="submit" value="Submit" />
}
Что будет дальше, это MAGIC, для каждогоФактический тип TextQuestion
, RadioQuestion
будет искать соответствующий частичный вид в EditTemplate и отображать его соответствующим образом.
Так что если у нас есть \ Home \ EditorTemplates \ RadioQuestion.cshtml, определенный как:
@model RadioQuestion
<p>This is a radio button based question</p>
// Implement the radio buttons or text boxes etc here.
Конечно, дисплей работает так же.