我生成局部视图
@model IEnumerable<ViewModel.vm_Master_QuestionSet_AnswerOptions>
@foreach (var item in Model)
{
<div class="form-group">
@Html.LabelFor(m => item.AnswerShownOrder, item.AnswerShownOrder.ToString(), new { @class = "control-label col-md-3 col-sm-3 col-xs-12" })
<div class="col-md-4 col-sm-4 col-xs-4">
@Html.TextBoxFor(m => item.AnswerOptionText, new { @class = "form-control", @id = item.PK_MasterQuestion_AnswerOptionID })
</div>
<div class="col-md-2 col-sm-2 col-xs-2">
@Html.CheckBoxFor(m => item.CorrectAnswer, new { @class = "form-control", @id = "chk" + item.PK_MasterQuestion_AnswerOptionID })
</div>
</div>
}
当创建控件的名称时以item.please开头,请参阅下图 在课堂上我有2个属性
public ICollection<string> AnswerOptionText { get; set; }
public ICollection<bool> CorrectAnswer { get; set; }
如果名称生成如此,则不会映射值。
为什么它会这样生成?我怎么能阻止这种情况?
答案 0 :(得分:0)
在模型类中使用以下代码:
[System.ComponentModel.DataAnnotations.Display(Name = "Whatever name you want to assign to it")]
public ICollection<string> AnswerOptionText { get; set; }
答案 1 :(得分:0)
您正在映射仍然是字符串集合的属性。在看到显示之前,您需要另一个for循环:
@model IEnumerable<ViewModel.vm_Master_QuestionSet_AnswerOptions>
@foreach (var item in Model)
{
<div class="form-group">
@Html.LabelFor(m => item.AnswerShownOrder, item.AnswerShownOrder.ToString(), new { @class = "control-label col-md-3 col-sm-3 col-xs-12" })
@foreach (var itemAnswer in item.AnswerOptionText)
{
<div class="col-md-4 col-sm-4 col-xs-4">
@Html.TextBoxFor(c => itemAnswer, new { @class = "form-control", @id = item.PK_MasterQuestion_AnswerOptionID })
</div>
}
}
您还需要在ICollection CorrectAnswer
属性上执行for循环。最后,拥有一个包含属性集合的模型集合并不是一个好主意。您可以使用不同的集合向cshtml视图声明一个模型,如下所示:
@model vm_Master_QuestionSet_AnswerOptions
附加属性集合:
public ICollection<string> AnswerOptionText { get; set; }
public ICollection<bool> CorrectAnswer { get; set; }
而不是这个更难维护,特别是如果它包含属性集合:
@model IEnumerable<ViewModel.vm_Master_QuestionSet_AnswerOptions>