Кто-нибудь объяснит мне Html.DropDown и его самого дорогого друга - PullRequest
5 голосов
/ 03 декабря 2008

Если вы проверите мои предыдущие вопросы, вы могли заметить, что я просто не получаю SelectList и Html.DropDown (). Я нахожу интригующим, что я, кажется, единственный в этом. Поэтому, возможно, мне следует попытаться изменить свое мышление, или, может быть, есть вещи, которые я не знаю, которые прояснят все это. Я действительно люблю всю инфраструктуру MVC, но SelectList просто не хочет умещаться в моей голове. Итак, вот мой список:

SelectList

  • Почему я не могу установить выбранное значение после создания экземпляра
  • Почему я не могу установить selectedValue по индексу элементов
  • Почему выбранное значение иногда является строкой, иногда классом, который я в него помещаю, а иногда ListItem
  • Почему элементы доступны только через GetItems ()
  • Почему типы selectedItem и listItems не совпадают?
  • Почему элементы, помещенные в список, преобразуются в listItem, а выбранный - нет?
  • Почему я не могу получить количество элементов без использования метода GetItems ()

Html.DropDownList ()

  • Почему с ней не работает связывание моделей
  • Почему нет поведения по умолчанию для выбора, когда есть только одна опция
  • Почему не сделать элемент SelectedValue в источнике selectLIst сделать его отмеченным элементом

Прежде, чем люди предложат мне написать свои собственные:
Поскольку он будет поставляться вместе с продуктом MVC, я бы предпочел иметь официальную поддержку базового элемента управления, а не использовать свой собственный и иметь все проблемы, которые с ним связаны.

Ответы [ 3 ]

3 голосов
/ 04 декабря 2008

Я чувствую твою боль. Простите за бесстыдный плагин, но вы можете заглянуть в MvcFluentHtml . Вы по-прежнему можете использовать SelectList и MultiSelectList, но у вас есть несколько других вариантов. Должен нормально работать со связующими веществами.

2 голосов
/ 09 января 2009

Я понимаю большинство ваших вопросов, и, как ни странно, я еще не сталкивался с какими-либо проблемами! Однако, возможно, я использую это именно так, как разработчики MVC предназначали и мне, и мне не нужно было слишком много рисковать вне коробки!

Но, надеюсь, вам немного поможет, вот пример того, как я использую SelectList и свойства, которые я установил:

<%= Html.DropDownList("Module.Status", new SelectList(ViewData.Model.Statuses, "ID", "Name", ((int)ViewData.Model.Module.Status)), new {tabindex = 1, title = "Status"})%>

и в своем действии контроллера я использую ModelBinder (вы говорили, что это не работает? Не знаете, с какими проблемами вы там сталкиваетесь, у меня все в порядке.)

public ActionResult Save(int? id, [Bind(Prefix = "Module", 
            Include = "Name,Description,Status")] Module module)

Тогда к статусу можно получить доступ, в моем случае «module.Status».

2 голосов
/ 16 декабря 2008

Аналогично, у меня было несколько багбиров с HTML-помощниками, но не более, чем SelectList. Чтобы добавить в список жалоб, я хотел бы знать, почему SelectList не принимает (или не может обработать) универсальный IEnumerable<T>. Опять же, вы можете объединить вашу собственную реализацию, но IEnumerable<T> позволит задействовать довольно много удобных функций (таких как прямая поддержка LINQ / Entity Framework), и я считаю, что это необходимо.

MvcFluentHtml (теперь часть MvcContrib ) выглядит как хорошее дополнение.

...