C# MVC5。基于数据值生成控件
我有一个代码来显示测验。测验有一个问题,每个问题都有一些选择。问题在于问题和选项都有自己的类型:C# MVC5。基于数据值生成控件,c#,asp.net-mvc,razor,dynamic-controls,C#,Asp.net Mvc,Razor,Dynamic Controls,我有一个代码来显示测验。测验有一个问题,每个问题都有一些选择。问题在于问题和选项都有自己的类型: 问题类型-单选按钮、复选框、文本区域 选项类型-标签、文本框(用于单选按钮)、文本区域(用于 单选按钮) 因此,为了在视图中显示所有这些内容,我为“for”循环中的每个问题编写了以下代码: @if(Model.Questions[i].Type==DAL.Entities.QuestionType.radio) { @对于(int j=0;jmodel.Questions[i].Selecte
- 问题类型-单选按钮、复选框、文本区域
- 选项类型-标签、文本框(用于单选按钮)、文本区域(用于 单选按钮)
@if(Model.Questions[i].Type==DAL.Entities.QuestionType.radio)
{
@对于(int j=0;j
@RadioButton(model=>model.Questions[i].SelectedOption,option.Id,new{Id=option.Id})
@if(option.OptionType==OptionType.textbox)
{
@Html.TextBoxFor(model=>model.Questions[i].Options[j].TextAnswer)
}
else if(option.OptionType==OptionType.textarea)
{
@Html.TextAreaFor(model=>model.Questions[i].Options[j].TextAnswer)
}
其他的
{
@DisplayFor(model=>option.Name)
}
@Html.HiddenFor(m=>m.Questions[i].Options[j].TextAnswer)
}
}
else if(Model.Questions[i].Type==DAL.Entities.QuestionType.ckeckbox)
{
@对于(int j=0;j
@Html.CheckBoxFor(model=>model.Questions[i]。选项[j]。选中,model.Questions[i]。选项[j]。名称)
@Html.DisplayFor(model=>model.Questions[i].Options[j].Name)
}
}
其他的
{
@Html.TextAreaFor(model=>model.Questions[i].TextAnswer)
}
我应该如何正确地重新排列代码,以摆脱糟糕的条件语句,并使代码符合最佳实践?有人能帮忙吗?!有人能帮忙吗?!
@if (Model.Questions[i].Type == DAL.Entities.QuestionType.radio)
{
<ul class="simple-list">
@for (int j = 0; j < Model.Questions[i].Options.Count(); j++)
{
var option = Model.Questions[i].Options[j];
<li>
@Html.RadioButtonFor(model => model.Questions[i].SelectedOption, option.Id, new { id = option.Id })
@if (option.OptionType == OptionType.textbox)
{
@Html.TextBoxFor(model => model.Questions[i].Options[j].TextAnswer)
}
else if (option.OptionType == OptionType.textarea)
{
@Html.TextAreaFor(model => model.Questions[i].Options[j].TextAnswer)
}
else
{
@Html.DisplayFor(model => option.Name)
}
@Html.HiddenFor(m => m.Questions[i].Options[j].TextAnswer)
</li>
}
</ul>
}
else if (Model.Questions[i].Type == DAL.Entities.QuestionType.ckeckbox)
{
<ul class="simple-list">
@for (int j = 0; j < Model.Questions[i].Options.Count(); j++)
{
<li>
@Html.CheckBoxFor(model => model.Questions[i].Options[j].Selected, Model.Questions[i].Options[j].Name)
@Html.DisplayFor(model => model.Questions[i].Options[j].Name)
</li>
}
</ul>
}
else
{
@Html.TextAreaFor(model => model.Questions[i].TextAnswer)
}