Asp.net mvc Как добавить placeholder для html.dropdownlist

Я использую asp.net mvc 3.

У меня есть этот раскрывающийся список стран, и я хочу добавить для него местозаполнитель. Здесь мой код:

@Html.DropDownList("country",
     new SelectList(ViewBag.countries as System.Collections.IEnumerable,
     "name", "name"), new { @class="chzn-select", @placeholder="-select-",
     @style="width:160px;" } )

Но заполнитель не работает, в то время как стиль работает.

Как установить заполнитель для этого?

PS. Я просто хочу использовать @Html.DropDownList, а не @Html.DropDownListFor

Ответ 1

В вашей коллекции ViewBag.Countries просто вставьте фиктивную запись из коллекции из коллекции с именем "-select-". Вы должны иметь возможность принудительно вызывать выбранный элемент с помощью альтернативного конструктора следующим образом:

@Html.DropDownList("country",
     new SelectList(ViewBag.countries as System.Collections.IEnumerable,
     "name", "name", "-select-"), new { @class="chzn-select", @style="width:160px;" } )

Ответ 2

Вы можете попробовать следующее:

@Html.DropDownList("country", new SelectList(ViewBag.countries), "-select- ", new { @class="chzn-select", @style="width:160px;" })

Ответ 4

Быстрое и (не очень) грязное решение с использованием jQuery.

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

@Html.DropDownList("yourName", yourSelectList, new { @class = "form-control select-add-placeholder" })

Затем где-то после:

$(".select-add-placeholder").prepend("<option value='' disabled selected>Select an option...</option>");

Что выглядит как:

enter image description here

Ответ 5

Я вижу, что нет простого ответа. Я разработал простое решение, но это дает некоторую работу. Это будет работать для DropDownList и DropDownListFor

Сначала создайте класс расширения, где захотите. (Должен быть статичным со статическими методами) Затем добавьте следующий метод расширения

public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper,string name, IEnumerable<SelectListItem> selectList, string optionLabel, bool disableLabel)
{
    MvcHtmlString mvc = htmlHelper.DropDownList(name, selectList, optionLabel);
    if (disableLabel)
    {
        string disabledOption = mvc.ToHtmlString();
        int index = disabledOption.IndexOf(optionLabel);
        disabledOption = disabledOption.Insert(index - 1, " disabled");

        return new MvcHtmlString(disabledOption);
    }
    else
    {
        return mvc;
    }
}

Теперь обратите внимание, что это расширение добавляет только новый атрибут disableLabel Это проверит, хотите ли вы отключить ярлык или нет.

Теперь вы можете перейти к просмотру сначала объявить, что вы хотите использовать класс расширения, который вы создали ex: @using WF.Infrastructure.Extension;

Теперь вы используете вот так: @Html.DropDownList("Unidade", lstUnidade, "Text of Option Disabled",true)

Примечание., если вы хотите, чтобы он работал с DropDownListFor, просто добавьте еще один метод расширения для вашего класса расширения с этой сигнатурой:

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionLabel,bool disableLabel)

PS: Если вы объявляете свои методы расширения в отдельном проекте, таком как я, вам нужно будет добавить сборки (System.Web.Mvc, System.Web) и в вашем классе расширения вам нужно будет объявить:

using System.Web.Mvc;
using System.Web.Mvc.Html;

Ответ 6

Может быть, если вы хотите, попробуйте это:

@Html.DropDownList("country",null,"-SELECT-",new { @class="chzn-select",@style="width:160px;" })

Ответ 7

Попробуйте это

@Html.DropDownListFor(m => m.SelectedProductIDs, Model.AvaliableProducts.ToSelectList("ID","Name"), new { @class = "chzn-select", data-placeholder="Please select a product" })

или

@Html.DropDownListFor(model => model.SelectedItemID, new SelectList(Model.employeeList, "Value", "Text"), new Dictionary<string, object> { { "data-placeholder", "Choose a sandbox..." }, { "class", "chzn-select" }, { "style", "width:200px;" } })

Ответ 8

Лучший способ

@Html.DropDownListFor(m => m.SelectedProductIDs,
                      Model.AvaliableProducts.ToSelectList("ID","Name"),
                      "Please select a product",
                      new { @class = "chzn-select"})

Ответ 9

@Html.DropDownListFor(m => m.SelectedProductIDs,
                      Model.AvaliableProducts.ToSelectList("ID","Name"),
                      "Please select a product",
                      new {enter code here @class = "chzn-select"})