Подтвердить что ты не робот

DropDownListFor не выбирает значение, если в цикле for

На мой взгляд

<%= Html.DropDownListFor( x => x.Countries[ i ], Model.CountryList )%>

в моем контроллере

public int[ ] Countries { get; set; }

public List<SelectListItem> CountryList { get; set; }

Когда формы публикуются, проблем нет, выпадающее меню заполняется и публикуются значения, выбранные пользователем. Но когда я пытаюсь загрузить форму с уже присвоенными значениями странам [], она не будет выбрана.

4b9b3361

Ответ 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