0

我已经定义了一个模型如下 -

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 绑定到视图的正确和通用方法吗?

4

1 回答 1

0

只是为了给你一个不同的前景,一个干净的解决方案是使用 EditorTemplates (将摆脱所有循环),所以它是这样的:

@model List<LakshyaMvc.Models.Question>

<ol class="Quest">
    @Html.EditorForModel()
</ol>

然后继续在-下创建对应的EditorTemplate~/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" })
于 2013-08-05T04:48:29.117 回答