2015-06-03 3 views
0

Поиск по сайту Я вижу много вариантов этого вопроса, но ни один из них не относится к этому конкретному случаю.Использование массива для заполнения нескольких полей MVC/C#

Я пытаюсь заполнить несколько DropDownLists значением в index i из массива, который содержит строки в моей модели.

Мой шаблон похож (упрощенно) к следующему:

@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"}; 
} 

View отправляет следующие HTML-выходные данные для fir й выпадающий (что соответствует для всех из них)

<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 значений, которые могут быть выбраны. Список значений отображается, но не устанавливает его значение так, как если бы я не использовал массив.

Пока значение для раскрывающегося списка не заполняется, я могу отобразить его значение, если я вызываю @Model.ArrayName[i] в моем шаблоне MVC.

Подробнее: Если ListOfPotentialValues содержит значение Foo, Bar, Baz, Qux И ArrayName содержит значение Foo, Foo, Qux, Baz

Я бы ожидать, что выпадающие начать со значениями Foo, Foo, QUX, БАЗ (соответственно) и при этом иметь возможность для выбора Foo, Bar, Baz и Qux

Есть ли что-то простое, что мне не хватает?

+0

Каков тип 'ArrayName'? 'ListOfPotentialValues'? Можете ли вы предоставить образец HTML, который выводится? – StriplingWarrior

+0

Я считаю, что это редактирование удовлетворяет то, что вы просите – cosban

ответ

2

К сожалению, это обыкновение работа - DropDownListFor() работает немного по-другому от других помощников при использовании в цикле (его был поднят вопрос о CodePlex несколько раз, и я не уверен, если его ошибка или просто ограничение помощника).

Вам нужно либо обычай EditorTemplate для вас модель и передать SelectList в шаблон в качестве дополнительных данных просмотра (но это не подходящий в вашем случае, поскольку у вас есть только массив типов значений) или вам нужно построить новый SelectList в каждой итерации и используйте перегрузку, которая устанавливает значение Selected.Например, вам требуется свойство, которое представляет собой коллекцию объектов (не SelectList)

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

Этот ответ лучше справляется с объяснением _what_ is wrong – 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

Я не уверен, что это так. В вопросе, в котором я указываю _ Список значений появляется, но не устанавливает его значение, как если бы я не использовал массив_. Это означает, что поля заполнялись до того, как я использовал 'string []'. Когда я перешел к версии массива, проблема началась. – cosban

+1

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

Смежные вопросы