2016-11-28 95 views
0

好吧,这是很简单,但我可以“T完成它> :(绑定字符串列表查看

我的视图模型

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> 
    } 

我得到错误:

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

这到底是什么错误?

编辑: 即使我尝试这个,这将不会绑定,我没有得到我的控制器中的值。

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

似乎答案是空的 –

+0

@MongZhu是空的。我在这里要做的是,它显示了4个文本框。当我发布表单时,它会使用每个文本框的值填充该列表。这是做到这一点的方式吗? – Waleed

+0

我创建了一个小提琴** [这里](https://dotnetfiddle.net/1W22vZ)**,它似乎按预期工作 – Code

回答

0

您需要先填充列表...类似:

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

foreach(var thing in Something){ 

Answers.Add(thing); 

} 
+0

告诉我你和我的代码之间的区别吗? – Waleed

+0

我用你的答案替换你的答案[0] – TAR

+0

好吧,我看到你我把'我'放在那里,但不是情况是一样的,我得到了“索引超出范围,必须是非负的,小于集合的大小“。错误。 – Waleed

0

您需要在您的视图的顶部添加@model ModelName。没有这个,它不会知道你想要循环的是什么。在您的模型中为答案添加@model ModelWithAnswers,然后迭代该属性。

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个,所以当你构建它时,确保你填充空字符串或空值的模型。