我已经定义了一个模型 -
public class Question
{
public int Id { get; set; }
public string Title { get; set; }
public int UserSelection { get; set; }
public Question()
{
this.Options = new List<Option>();
}
public virtual ICollection<Option> Options { get; set; }
}
由于ICollection
没有索引器,我在将ICollection Options
绑定到视图时遇到问题。
@model List<LakshyaMvc.Models.Question>
<ol class="Quest">
@for (int i = 0; i < Model.Count; i++)
{
var quest = Model[i];
<li>
@Html.LabelFor(x => quest.Title, quest.Title)
<ol class="Opt">
@for (int j = 0; j < quest.Options.Count; j++)
{
@*Indexer not availabl here *@
<li class="Opt">
@Html.RadioButtonFor(o => quest.Options[j].Title, quest.Options[j].Title, new { @name = "uniqueRadio" })
</li>
}
</ol>
</li>
}
</ol>
我要改编的临时解决方案是创建部分视图以显示选项。 定义模型如下 -
@model List<LakshyaMvc.Models.Option>
这是正确的吗?将ICollection绑定到视图的一般方法?
答案 0 :(得分:0)
为了给你一个不同的前景,一个干净的解决方案是使用EditorTemplates(将摆脱所有的循环),所以它是这样的:
@model List<LakshyaMvc.Models.Question>
<ol class="Quest">
@Html.EditorForModel()
</ol>
然后继续在 - ~/Views/Shared/EditorTemplates/Question.cshtml
@model LakshyaMvc.Models.Question
<li class="Opt">
@Html.EditorFor(m => m.Options)
</li>
然后选择相应的EditorTemplate选项:
~/Views/Shared/EditorTemplates/Option.cshtml
@model LakshyaMvc.Models.Option
@Html.RadioButtonFor(m => m.Title, Model.Title, new { @name = "uniqueRadio" })