Ошибка @ Html.DropDownList в Selected = true

0

Кажется, что @Html.DropDownList не может выполнить рендеринг с выбранным набором значений. У меня есть пример:

@foreach (SelectListItem item in ViewBag.Agare as List<SelectListItem>)
{
    <div>
        Item: Name: @(item.Text) Value: @(item.Value) Selected: @(item.Selected)
    </div>
}
<div class="editor-field">
    @Html.DropDownList("Agare", ViewBag.Agare as List<SelectListItem>, new {@class = "chzn-select" })
</div>

И результат:

Название: Demo Yacht Club Значение: 1 Выбрано: False

Имя: Anders Jansson Значение: 100 Выбрано: False

Имя: Per Kyrk Значение: 101 Выбрано: False

Имя: Oskar Persson Значение: 102 Выбрано: True

Имя: Pluten Snutten Значение: 204 Выбрано: False

И первые параметры всегда являются значениями по умолчанию!

Выделенный код:

  <select class="chzn-select" id="Agare" name="Agare" required="required">
    <option value="1">Demo Yacht Club</option>
    <option value="100">Anders Jansson</option>
    <option value="101">Per Kyrk</option>
    <option value="102">Oskar Persson</option>
    <option value="204">Pluten Snutten</option>
 </select>

Стоит отметить, что я также использую Choosen для создания DropDown, но не имеет значения, перестану ли я его использовать. В противном случае это очень прямо вперед!

И мои версии: Visual Studio Express 2013 для Интернета. MVC 5.0.0 Asp.Net Razor 3.0.0 Asp.Net Web API 5.0.0 Asp: net Web Pages 3.0.0 EF 6.0.1 выбран 0.12.0

Есть идеи?

Теги:
asp.net-mvc

3 ответа

2

Попробуйте изменить имя вашего DropDownList 'Agare', чтобы оно отличалось от вашего свойства ViewBag. Странно, я знаю!

@Html.DropDownList("SomethingElse", ViewBag.Agare as List<SelectListItem>, new {@class = "chzn-select" })
  • 1
    Ничего странного. Проще говоря, помощник использует предоставленное коллекцией свойство Selected если он не находит предоставленное ViewData значение с данным ключом, в данном случае «Agare». В противном случае он перестраивает список выбора и устанавливает параметр selected, если option.value == ViewData["Agare"] .
0

Изменено имя свойства ViewBag, и теперь оно работает.

@Html.DropDownList("Agare", ViewBag.ListOfAgare as List<SelectListItem>, new { required = "required", @class = "chzn-select" })

Почему это?

  • 0
    Предоставляет ли ответ @Zabavsky на мой ответ то, что вам нужно?
  • 0
    Нет, не думай так. Последнее предложение сбивает меня с толку! Никогда не используйте ViewData, только модели и свойства ViewBag!
0

Не используйте ViewBag. Лучшее решение более важно, чем просто проблема. Если вы ищете в Интернете, чтобы "ViewBag SelectListItem не работал", вы можете найти много, поэтому я предлагаю вам использовать VIewModel.

ниже приведен пример.

ViewModel

public class SportsViewModel
{
    public string SelectedSports { get; set; }
    public IEnumerable<SelectListItem> Sportses { get; set; } 
}

действие

public ActionResult Sport()
{
    var model = new SportsViewModel();
    //_sportses is a list for sports
    // get selectedSprortsId value for dropdown selected item. 
    model.Sportses = _sportses.Select(m => new SelectListItem {Value = m.Id.ToString(), Text = m.Name, Selected = m.Id == selectedSprortsId});

       return View(model);
}

Посмотреть

@model SportsViewModel

@foreach (var item in Model.Sportses)
{
    <div>
        Item: Name: @(item.Text) Value: @(item.Value) Selected: @(item.Selected)
    </div>
}
<div class="editor-field">
    @Html.DropDownList("SelectedSports", Model.Sportses, new { @class = "chzn-select" })
</div>

Обновить:

Если вы не можете переключиться на ViewModel, вы можете использовать SelectList и установить весь список в свой ViewBag, как показано ниже:

   var SelectListItemList = (from s in _sportses
                      select new SelectListItem
                      {
                          Text = s.Name,
                          Value = s.Id.ToString(),
                      }).ToList();

    ViewBag.Agare = new SelectList(SelectListItemList , "Value", "Text", selectedSprortsId);

Тогда, по вашему мнению, вы по-прежнему можете использовать свой существующий код только as List<SelectListItem> ".

@foreach (SelectListItem item in ViewBag.Agares)
{
    <div>
        Item: Name: @(item.Text) Value: @(item.Value) Selected: @(item.Selected)
    </div>
}
<div class="editor-field">
 @Html.DropDownList("Agare", ViewBag.Agare as List<SelectListItem>, new { @class = "chzn-select" })
  • 0
    Лучше иметь лучшее решение, но определенно не более важное, чем то, что работает.
  • 1
    Привет @Ant P, вы бы просто попытались заставить что-то работать, а не думать о том, чтобы иметь лучшее решение или иметь решение, которое можно обслуживать ... Лучшее решение подразумевает, что оно работает, поэтому оно называется решением, только лучше.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню