将字符串列表绑定到View

时间:2016-11-28 18:48:47

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

好的,这很简单,但我可以" T GET IT DONE> :(

我的ViewModel

public List<string> Answers = new List<string>();

我的观点

    @for (int i = 0; i < 4; i++)
    {
        <div class="form-group">
            @Html.TextBoxFor(x => x.Answers[0], new { @class = "form-control" })
        </div>
    }

我收到错误:

指数超出范围。必须是非负数且小于集合的大小。 参数名称:index

这到底是怎么回事?

编辑: 即使我尝试这个,这也不会绑定我的控制器中的值。

    @for (int i = 0; i < 4; i++)
    {
        <div class="form-group">
            <input type="text" name="Answers[@i]" value="" />
        </div>
    }

3 个答案:

答案 0 :(得分:0)

您需要首先填充列表......例如:

public List<string> Answers = new List<string>();

foreach(var thing in Something){

Answers.Add(thing);

}

答案 1 :(得分:0)

您需要在视图顶部添加@model ModelName。没有它,它将无法知道你想要循环的是什么。在模型中为答案设置属性,在视图顶部添加@model ModelWithAnswers并迭代属性。

答案 2 :(得分:0)

正如其他人所指出的那样,索引超出范围正在发生,因为您正在引用集合中不存在的元素。

解决该问题,确保您的迭代器受元素约束,例如:

@for (int i = 0; i < Model.Answers.Count; i++)
{
    <div class="form-group">
        @Html.TextBoxFor(x => x.Answers[i], new { @class = "form-control" })
    </div>
}

如果您的模型中没有答案,则不会显示任何文本框。根据您的描述,我假设您至少需要4个,因此请确保在构建模型时使用空字符串或空值填充模型。