模型foreach元素名称生成不正确

时间:2017-08-26 14:43:29

标签: c# asp.net-mvc razor

我生成局部视图

@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开头,请参阅下图 enter image description here 在课堂上我有2个属性

public ICollection<string> AnswerOptionText { get; set; }
        public ICollection<bool> CorrectAnswer { get; set; }

如果名称生成如此,则不会映射值。

为什么它会这样生成?我怎么能阻止这种情况?

2 个答案:

答案 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>