2016-11-28 93 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個,所以當你構建它時,確保你填充空字符串或空值的模型。