2015-06-03 88 views
0

通過我看到很多這個問題的變化的網站搜索,但沒有涉及到這種特殊情況下的多個領域。使用數組來填充MVC/C#

我想在index i從我的模型內持有的字符串數組來填充值多DropDownLists。

我的模板是相似的(簡化的)爲以下:

@model foo 

@for (int i = 0; i < Model.ArrayName.Length; i++) 
{ 
    @Html.LabelFor(m => m.ArrayName[i], "Index " + i, new {}) 
    @Html.DropDownListFor(m => m.ArrayName[i], Model.ListOfPotentialValues, new {}) 
    @Html.ValidationMessageFor(m => m.ArrayName[i]) 
} 

更清楚,ArrayName是一個字符串數組(string[]),ListOfPotentialValues的類型是IEnumerable<SelectListItem>

用於該代碼的型號可能如下所示:

public IEnumerable<SelectListItem> ListOfPotentialValues 
{ 
    return SelectList(/* A list of Strings*/) 
} 

public string[] ArrayName { get; set; } 

//Constructor 
public foo() 
{ 
    ArrayName = new string[] {"Foo", "Foo", "Baz","Qux"}; 
} 

該視圖發送以下HTML輸出ST下拉菜單(這是一貫的爲他們所有)

<div> 
    <label for="ArrayName_0_">Index 0</label> 
    <select id="ArrayName_0_" name="ArrayName[0]"> 
     <option>Foo</option> 
     <option>Bar</option> 
     <option>Baz</option> 
     <option>Qux</option> 
    </select> 
    <span class="field-validation-valid" data-valmsg-for="ArrayName[0]" data-valmsg-replace="true"></span> 
</div> 

這個,你可能會或可能不會推導出ArrayName,當然,我想顯示的列保持值的名稱和ListOfPotentialValues是可以選擇的值的SelectList。值的列表正在顯示,但沒有設置它的值,因爲如果我不使用數組。

儘管未填充下拉列表的值,但如果我在我的MVC模板中調用@Model.ArrayName[i],則可以顯示它的值。

更多細節: 如果ListOfPotentialValues包含的值Foo, Bar, Baz, QuxArrayName包含的值Foo, Foo, Qux, Baz

我希望的下拉菜單開始與價值觀富,富,Qux,巴茲(分別),同時還具有選擇權選擇Foo,Bar,Baz和Qux

有沒有簡單的東西我錯過了?

+0

「ArrayName」的類型是什麼? 'ListOfPotentialValues'?你能提供一個正在輸出的HTML樣本嗎? – StriplingWarrior

+0

我相信這個編輯滿足你所要求的 – cosban

回答

2

不幸的是這不會工作 - 在一個循環中使用時(它被提出作爲CodePlex的問題了幾次,我不知道如果其在DropDownListFor()工作的方式有點不同,從其他傭工錯誤或僅僅是幫手的限制)。

您需要用一個自定義EditorTemplate爲你的模型並通過SelectList到模板附加視圖數據(但不適合你的情況,因爲你只有值類型的數組),或者你需要建立一個新的SelectList在每次迭代中使用設置Selected值的過載。例如,您的模型需要一個屬性,它是一個對象集合(不是SelectList

@Html.DropDownListFor(m => m.ArrayName[i], new SelectList(Model.MyCollection, "yourValueProperty", "yourTextProperty", Model.ArrayName[i]) 
+0

這個答案在解釋_what_錯誤方面做得更好 – cosban

2

我認爲你正在使用的SelectList的方式是有問題的,請嘗試:

@Html.DropDownListFor(m => m.ArrayName[i], new SelectList(list, null, null, Model.ArrayName[i]), new {}) 

不知道它會與一個字符串列表時,您可能需要轉換那些C#對象。

http://www.codeproject.com/Questions/701424/Default-value-for-html-DropdownListFor-in-MVC-Razo

+0

我不確定是這種情況。在我陳述的問題中_值的列表正在顯示,但沒有設置它的值,因爲如果我不使用array_。這就是說,在我使用'string []'之前,這些字段是填充的。當我轉移到陣列版本時,問題開始了。 – cosban

+1

[dotnetfiddle](https://dotnetfiddle.net/eODmnG) – Grundy