DropDownListFor не выбирает значение, если в цикле for
На мой взгляд
<%= Html.DropDownListFor( x => x.Countries[ i ], Model.CountryList )%>
в моем контроллере
public int[ ] Countries { get; set; }
public List<SelectListItem> CountryList { get; set; }
Когда формы публикуются, проблем нет, выпадающее меню заполняется и публикуются значения, выбранные пользователем. Но когда я пытаюсь загрузить форму с уже присвоенными значениями странам [], она не будет выбрана.
Ответы
Ответ 1
Я тоже получаю то же самое. При использовании foreach для циклического перемещения по DropDownListFor (т.е. Для отображения нескольких элементов выбора на странице).
Моя работа заключается в том, чтобы установить выбранное значение в контроллере, а не в виде: что-то вроде этого:
В контроллере:
public class FruitList
{
public int? selectedFruit{ get; set; }
public List<SelectListItem> fruits
{
get
{
fruitEntities F = new fruitEntities();
List<SelectListItem> list = (from o in F.Options
select new SelectListItem
{
Value = o.fruitID,
Text = o.fruit,
Selected = o.fruitID == selectedFruit
}).ToList();
return list;
}
}
}
public class ViewModel
{
public List<FruitList> collectionOfFruitLists { get; set; }
}
В представлении
<table>
<% for (int i=0; i < Model.collectionOfFruitLists.Count; i++ )
{ %>
<tr>
<td><%: Html.DropDownList("fruitSelectList", collectionOfFruitLists[i].fruits, "Please select...") %></td>
</tr>
<%} %>
</table>
Маленький бит Selected = o.fruitID == selectedFruit
в контроллере, который действует как оператор SQL CASE; это действительно хорошо объясняется Lance Fisher (спасибо Лэнсу, ваше сообщение действительно помогло мне:)
Ответ 2
Не уверен, что это новое для mv4 или оно существует в предыдущей версии. Но DropDownListFor включает дополнительный параметр для конструктора SelectList.
SelectList(IEnumerable, String, String, Object)
Например:
Html.DropDownListFor( x => x.Countries[ i ], New SelectList(Model.CountryList,"ID","Description",Model.Countries[i]))
Где ID
- идентификатор страны в объекте CountryList
, а Description
- название страны.
Ответ 3
Я знаю, что этот вопрос немного устарел, но я просто столкнулся с этой проблемой, перейдя через список объектов и попытавшись связать значения с DropDownListFor (s) в моем Редактированном представлении.
Я преодолел проблему с помощью встроенного решения, используя логику из некоторых предыдущих решений, предоставленных другими для этого вопроса.
Связывание с моей моделью:
@Html.DropDownListFor(model => model.QuestionActions[i].QuestionActionTypeId,
Model.QuestionActionTypes.Select(x => new SelectListItem() { Value = x.Value, Text = x.Text, Selected = (x.Value == Model.QuestionActions[i].QuestionActionTypeId.ToString()) }).ToList(),
"Select Action Type",
new { })
Model.QuestionActionTypes - это SelectList, который заполняется в моем контроллере.
Ответ 4
Это немного взломать, и JavaScript зависит, но он очень хорошо работал у меня.
Вам понадобятся идентификаторы клиентов, которые будут создаваться по полям (обычно они могут быть разработаны вручную, но для обеспечения безопасности вы можете использовать что-то вроде Метод FieldIDFor.
Вам просто нужно установить значения на основе модели, в jQuery $(document).ready:
<script type="text/javascript">
$(document).ready(function () {
@for(var i = 0; i < 5; i++)
{
<text>
$("#@Html.FieldIDFor(m => m.Countries[i])").val("@Model.Countries[i]");
</text>
}
});
</script>
Ответ 5
Поле select отправляет одно значение, поэтому свойство Countries
не должно быть массивом. Также в вашем сообщении неясно, где переменная i
, которую вы используете в своем выражении лямбда, и этот x.CountryList
, используемый в помощнике, не будет компилироваться, поскольку x
не определен.
Модель:
public class MyModel
{
public int SelectedCountry { get; set; }
public List<SelectListItem> CountryList { get; set; }
}
Вид:
<%= Html.DropDownListFor(x => x.SelectedCountry, Model.CountryList) %>
UPDATE:
Согласно комментарию, кажется, что есть несколько выпадающих списков. Я подозреваю, что проблема может возникнуть из переменной i
, используемой как индекс в цикле for
.
Вместо этого вы можете попробовать:
Модель:
public class MyModel
{
public int[] Countries { get; set; }
public List<SelectListItem> CountryList { get; set; }
}
Вид:
<% foreach (var country in Model.Countries) { %>
<%= Html.DropDownListFor(x => country, Model.CountryList) %>
<% } %>
Ответ 6
Вместо использования IEnumerable в вашей модели просмотра используйте Список объектов, подобных этому:
public List<PairVM<string,string>> TiposValorCobertura { get; private set; }
И, на ваш взгляд, когда вы назначаете выбранные элементы для раскрывающегося списка в цикле, сделайте это следующим образом:
@Html.DropDownListFor(m => m.Coberturas[i].TipoLimiteInferior, new SelectList(Model.TiposValorCobertura,"Key","Description", Model.Coberturas[i].TipoLimiteIferior))
Где "Ключ" и "Описание" являются свойствами PairVM