Это может быть излишним, и я на самом деле склоняюсь к ответу @Mystere Man, но это другой вариант.
Вместо обычных примитивных типов в вашей ViewModel, установите их для обслуживания логики. Похоже, Имя и Фамилия всегда отображается, в то время как Адрес и MaxAge являются условными.
Итак, настройте вашу ViewModel так:
public class QuestionViewModel
{
public string Name { get; set; }
public string LastName { get; set; }
public IEnumerable<ConditionalField> ConditionalFields { get; set; }
public string Category { get; set; }
public string Account { get; set; }
}
public class ConditionalField
{
public string Field { get; set; }
public bool Display { get; set; }
}
В вашем контроллере установите вложенную модель представления и логические значения для Address и MaxAge , в соответствии со значением CurrentTypeQuestion
.
Тогда сделайте так, чтобы ваш View был таким:
/ Views / Questions.cshtml
@model QuestionViewModel
@Html.DisplayForModel()
Затем создайте пользовательский шаблон отображения (или шаблон редактора, если это форма) для QuestionViewModel
:
/ Views / DisplayTemplates / QuestionViewModel.cshtml
@model QuestionViewModel
@Html.DisplayFor(model => model.Name)
@Html.DisplayFor(model => model.LastName )
@Html.DisplayFor(model => model.Category)
@Html.DisplayFor(model => model.Account)
@Html.DisplayFor(model => model.ConditionalFields)
Затем создайте другой пользовательский шаблон отображения для ConditionalField
:
Views / DisplayTemplates / ConditionalField.cshtml
@model ConditionalField
@if (Model.Display) {
@Html.DisplayForModel()
}
Как я уже сказал, это может быть излишним, но в итоге у вас есть только один оператор if в пользовательском шаблоне, без циклов, и ваш основной вид и шаблон первого уровня остаются чистыми.