如何将ICollection属性绑定到MVC4 View?

时间:2013-08-05 04:36:04

标签: c# entity-framework asp.net-mvc-4 icollection

我已经定义了一个模型 -

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绑定到视图的一般方法?

1 个答案:

答案 0 :(得分:0)

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

@model List<LakshyaMvc.Models.Question>

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

然后继续在 - ~/Views/Shared/EditorTemplates/Question.cshtml

下创建相应的EditorTemplate
@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" })