2013-04-18 3 views
7

Я использую ASP.NET MVC 3.asp.net MVC Как добавить заполнитель для html.dropdownlist

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

@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

ответ

4

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

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

Привет Натан, я попробовал ваш но это не сработало. – user2093360

+1

Вот мой путь, и он, наконец, работает. @ Html.DropDownList («страна», новый SelectList (ViewBag.countries as System.Collections.IEnumerable, «имя», «имя»), «-SELECT-», новый {@ class = «chzn-select», @placeholder = "- SELECT-", @ style = "width: 160px;"}) – user2093360

+0

Я думаю, что @@ placeholder бесполезен, хотя стиль @@ вызывающе работает. Мне интересно, правильное ли ключевое слово @placeholder. Я попытался найти документацию или спецификацию @@ html.DropDownList, но не удалось. Вы знаете, где я могу их найти? – user2093360

-1

Попробуйте

@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;" } }) 
+0

Поскольку у меня уже есть другая модель, переходящая на эту страницу, поэтому я не хочу использовать DropDownListFor, используйте DropDownList – user2093360

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

Пожалуйста, смотрите более подробно: http://code.stylenet.ca/mvc3-data-placeholder-html5-attribute/

+1

. Ссылка на ссылку обескуражена, так как целостность ссылки может истечь позднее. Пожалуйста, объясните, как работает этот код и почему в вашем сообщении, чтобы он был автономным, и используйте ссылку только в качестве ссылки. – rayryeng

+0

Это сработало для меня. Я использую выбранный плагин слишком – Ewerton

1

Я вижу, что нет простого ответа. Я разработал простое решение, но это дает некоторую работу. Это будет работать для 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 Это будет проверять, если вы хотите отключить или нет метка.

Теперь вы давайте идти в сторону view's первый заявить, что вы хотите использовать класс расширения вы создали 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, система.Web) и в своем классе Extension вам нужно будет объявить:

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

Вы можете попробовать это:

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

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

@Html.DropDownListFor(m => m.SelectedProductIDs, 
         Model.AvaliableProducts.ToSelectList("ID","Name"), 
         "Please select a product", 
         new { @class = "chzn-select"}) 
Смежные вопросы