2014-12-16 3 views
0

До MVC 5, DropDownList был scaffolded в моем Razor Редактировать Вид:Добавление htmlattributes к помощнику DropDownList изменяет поведение

@Html.DropDownList("EntityId", String.Empty)

Но теперь эквивалент (пост MVC 5) scaffolded как:

@Html.DropDownList("EntityId", null, htmlAttributes: new { @class = "form-control" })

Я не хочу, чтобы добавить htmlAttributes сохранить интерфейс последовательной, но DropDownList больше не работает, как ожидалось для обнуляемого EntityId (int ? EntityId). Проблема в том, что элемент по умолчанию установлен в первый элемент в списке, если EntityId имеет значение NULL. Я хочу пустой элемент, если идентификатор равен null, и соответствующий выбор, если нет.

PS. Мой контроллер строит список следующим образом: ViewBag.EntityId = new SelectList(db.Entities, "EntityId", "Name", EntityId);

+0

Есть ли у вашей модели есть свойство вашего связывания? (у вас не должно быть одинакового имени для свойства модели и свойства ViewBag' SelectList) –

+0

Да, возможно, это может вызвать проблемы? Не уверен, почему я когда-либо это делал, но я подозреваю, что это похоже на мой код. Я только что видел ваш ответ ниже, и попробую это вернуться на работу завтра. Thx – tr3v

+0

Только что заметил, почему я использую одно и то же имя свойства как для модели, так и для ViewBag - это потому, что по умолчанию она находится в контроллере по умолчанию - что-то, о чем нужно знать. – tr3v

ответ

4

Использование сильно типизированных помощников. Если ваша модель имеет свойство int? EntityId, то в контроллере

ViewBag.EntityList = new SelectList(db.Entities, "EntityId", "Name") 

Примечание свойство ViewBag не должно совпадать с именем в качестве свойства модели, а третий параметр «SelectList` не требуется.

Тогда в представлении

@Html.DropDownListFor(m => m.EntityId, (SelectList)ViewBag.EntityList, "--Please select--", new { @class = "form-control" }) 

Если EntityId является null, то первый вариант будет выбран, в противном случае, если EntityId соответствует значению одного из ваших вариантов, то он будет выбран.

+0

Вы имеете в виду ** ViewBag **. EntityList not Model.EntityList? – tr3v

+0

Да, я делаю :) будет обновляться в комедии (я всегда использую модели просмотра и ненавижу «ViewBag') –

+0

Так оно и было - название свойства ViewBag, похоже, ничего не изменило. Есть ли конкретная причина, по которой свойства свойства и свойства свойства ViewBag не могут быть одинаковыми? Просто любопытно. – tr3v

1

Изменить ваш @HTML.DropDownList к

@Html.DropDownList("EntityId", (SelectList)Viewbag.EntityList,String.Empty, new { @class = "form-control" })` 
+0

Это тоже помогло, как только я добавил бросок для SelectList (отредактировал ваш пост). Благодарю. – tr3v