Додавання css-класу для вибору за допомогою @ Html.DropDownList ()


76

Я будую свою першу програму MVC після багатьох років створення веб-форм, і з якихось причин я не можу зробити цю роботу:

@Html.DropDownList("PriorityID", String.Empty, new {@class="textbox"} )

Повідомлення про помилку:

System.Web.Mvc.HtmlHelper<SPDR.Models.Bug>'не містить визначення, DropDownListа найкраще перевантаження методу розширення System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string, System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>, object)містить деякі недійсні аргументи

Будь-яка допомога дуже вдячна!


Ви не використовуєте перевантаження, яке приймає ці параметри. Дивіться документацію .
vcsjones

Відповіді:


105

Подивившись на контролер і дізнавшись трохи більше про те, як насправді працює MVC, я зміг зрозуміти це.

Мій погляд був одним із автоматично згенерованих і містив такий рядок коду:

@Html.DropDownList("PriorityID", string.Empty)

Щоб додати атрибути html, мені потрібно було зробити щось подібне:

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class="dropdown" })

Ще раз дякую @Laurent за вашу допомогу, я розумію, що питання було не таким зрозумілим, як могло бути ...

ОНОВЛЕННЯ:

Кращим способом зробити це буде використання DropDownList, де, де це можливо, таким чином ви не покладаєтеся на магічний рядок для атрибута name

@Html.DropDownListFor(x => x.PriorityID, (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class = "dropdown" })

Дякую. Мені це дуже допомагає
Замір

4
Я використовую ваше рішення (моє подання також автоматично генерується), але коли я перебуваю в режимі редагування, я втратив вибране значення, чи можете ви мені допомогти? @ Html.DropDownList ("StateGroupID", (IEnumerable <SelectListItem>) ViewBag.StateGroupID, String.Empty, new {@class = "form-control"})
Віллі,

@Willy, я не впевнений на 100%, що ви маєте на увазі під словом "загубив моє вибране значення" - ви маєте на увазі, що вибране значення неправильно розміщено на сервері? Будь ласка, перегляньте мою редакцію щодо можливого рішення ...
Lee Bailey

2
коли я редагував запис, випадаючий список порожній, його слід прив’язати до значення. Я знайшов рішення, передавши нульове значення за 2-м параметром @ Html.DropDownList ("StateGroupID", null, String.Empty, new {@class = "form-control"})
Віллі,

1
Все добре. Але якщо ви хочете значення за замовчуванням, як -select-у вашому списку, вам потрібно змінити це повинно сподобатися@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })
gdmanandamohon

40

Як випливає з підпису повідомлення про помилку, другий аргумент повинен бути IEnumerable, точніше, IEnumerable SelectListItem. Це перелік варіантів вибору. Ви можете використовувати тип SelectList, який є IEnumerable з SelectListItem. Для списку без вибору:

@Html.DropDownList("PriorityID", new List<SelectListItem>(), new {@class="textbox"} )

Для списку з декількома варіантами:

@Html.DropDownList(
    "PriorityID", 
    new List<SelectListItem> 
    { 
        new SelectListItem { Text = "High", Value = 1 }, 
        new SelectListItem { Text = "Low",  Value = 0 },
    }, 
    new {@class="textbox"})

Можливо, цей підручник може допомогти: Як створити DropDownList за допомогою ASP.NET MVC


Дякую за відповідь Лоран, на жаль, я все ще маю проблеми. Використовуючи ваш рядок коду, я отримую таку помилку: System.Web.Mvc.SelectList 'не містить конструктора, який приймає 0 аргументів. Цей рядок працює, я отримую тег select, але я просто хочу додати клас css: @Html .DropDownList ("PriorityID", String.Empty)
Lee Bailey

Ви маєте рацію, я змінився на new List<SelectListItem>(). SelectList насправді є допоміжним класом, який допоможе вам створити список варіантів з іншого списку об’єктів. Дивіться підручник, який я додав до свого допису.
Laurent le Beau-Martin

Дякую, це працює, однак, використовуючи перевантаження №2 (ім'я рядка, рядок optionLabel), моє випадаюче меню заповнюється автоматично записами з моєї таблиці пріоритетів. Це саме те, що я хочу, мені просто потрібно додати клас css - але, здається, немає перевантаження, яке дозволяє це ?!
Lee Bailey

19

Якщо ви додаєте більше, ніж аргумент, випадаючий список у Asp.Net MVC. Коли ви редагуєте запис або передаєте значення у зоні перегляду.

Використовуйте це, це буде працювати: -

@Html.DropDownList("CurrencyID",null,String.Empty, new { @class = "form-control-mandatory" })

Ти зробив мені день @mohita
Мухаммад Асікуззаман

8

Є кілька варіантів у конструкторах, якщо у вас немає dropdownList, і ви хочете вставити клас CSS, ви можете використовувати як

@Html.DropDownList("Country", null, "Choose-Category", new {@class="form-control"})

у цьому випадку Country - це назва вашого випадаючого списку, значення null означає, що ви не передаєте жодного загального списку з вашого контролера "Виберіть категорію", вибраний елемент і останній у класі CSS, якщо ви не хочете вибрати будь-який параметр за замовчуванням, тому просто замінити "Вибрати категорію" на ""


6

Ви можете зробити це за допомогою jQuery

  $("select").addClass("form-control")

тут, виберіть тег is- html, контроль форми - назва класу

 @Html.DropDownList("SupplierId", "Select Supplier")

і тут постачальник - це ViewBagList, вибір постачальника - відображуване ім’я


4

Просто спробуйте це

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID,  new { @class="dropdown" })

Але якщо ви хочете значення за замовчуванням або відсутнє значення опції, вам доведеться спробувати це, оскільки String.Emptyбуде обрано те значення, яке не буде для вас, яке буде працювати як -select-параметр за замовчуванням

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })


1

Спробуйте це:

@Html.DropDownList(
    "country", 
    new[] {
        new SelectListItem() { Value = "IN", Text = "India" },
        new SelectListItem() { Value = "US", Text = "United States" }
    }, 
    "Country",
    new { @class = "form-control",@selected = Model.Country}
)

Ласкаво просимо до Stack Overflow! Незважаючи на те, що цей фрагмент коду може вирішити питання, включення пояснення дійсно допомагає поліпшити якість вашої публікації. Пам’ятайте, що ви будете відповідати на запитання для читачів у майбутньому, і ці люди можуть не знати причин вашої пропозиції коду. Будь ласка, також намагайтеся не переповнювати свій код пояснювальними коментарями, це зменшує читабельність як коду, так і пояснень!
Rizier123,

Знайдіть хвилинку, щоб прочитати довідку з редагування в довідковому центрі. Форматування на переповненні стека відрізняється від інших сайтів.
Rizier123,

0

Ви можете просто зробити це:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.