2013-04-18 9 views
7

Sto usando asp.net MVC 3.asp.net mvc Come aggiungere segnaposto per html.dropdownlist

ho questo dropdownlist dei paesi e voglio aggiungere un segnaposto per esso. Ecco il mio codice:

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

Ma il segnaposto non funziona, mentre lo stile funziona.

Come si imposta un segnaposto per questo?

PS. Voglio solo usare @Html.DropDownList, non @Html.DropDownListFor

risposta

4

Nei tuoi ViewBag.Countries collezione Just inserire un record fittizio al da della collezione con il nome "-Seleziona-". Si dovrebbe essere in grado di forzare la voce selezionata con un costruttore alternativo come questo:

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

Ciao Nathan, ho provato il tuo metodo, ma non ha funzionato – user2093360

+1

Ecco la mia strada e alla fine funziona. @ Html.DropDownList ("country", nuova lista di selezione (ViewBag.countries come System.Collections.IEnumerable, "name", "name"), "-SELECT-", new {@ class = "chzn-select", @placeholder = "- SELECT-", @ style = "width: 160px;"}) – user2093360

+0

Penso che il @@ placeholder sia inutile, sebbene lo stile @@ funzioni in modo provocatorio. Mi chiedo se @placeholder sia una parola chiave corretta. Ho provato a cercare nella documentazione o nelle specifiche di @@ html.DropDownList ma non sono riuscito. Sai dove posso trovarli? – user2093360

-1

Prova questa

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

O

@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

Poiché ho già passato un altro modello a questa pagina, quindi non voglio utilizzare DropDownListFor, utilizzare solo DropDownList – user2093360

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

Si prega di vedere più in dettaglio: http://code.stylenet.ca/mvc3-data-placeholder-html5-attribute/

+1

. Riferimento a un collegamento sconsigliato in quanto l'integrità del collegamento potrebbe scadere in un secondo momento. Per favore spiega come funziona quel codice e perché nel tuo post per essere autosufficiente e usa il link solo come riferimento. – rayryeng

+0

Ha funzionato per me. Sto usando anche il plugin scelto – Ewerton

1

Vedo che non c'è una risposta facile. Ho sviluppato una soluzione semplice ma dà un po 'di lavoro. Questo lavoro per DropDownList e DropDownListFor

prima creare una classe di estensione dove vuoi. (Deve essere statico con metodi statici) e quindi aggiungere il seguente metodo di estensione

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; 
    } 
} 

Ora noti la questa estensione solo aggiungere un nuovo attributo, il disableLabel Questo controllerà se si desidera disabilitare o meno etichetta.

Now You Andiamo da parte view's primo dichiarano che si desidera utilizzare la classe estensione aver creato es: @using WF.Infrastructure.Extension;

Ora si usa come se fosse: @Html.DropDownList("Unidade", lstUnidade, "Text of Option Disabled",true)

Nota: se si desidera lavorare con DropDownListFor, basta aggiungere un altro metodo di estensione per la classe di estensione con questa firma:

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

PS: Se si dichiara vostri metodi di estensione in un progetto separato come me, sarà necessario aggiungere le assemblee (System.Web.Mvc, di sistema.Web) e nella tua classe di estensione è necessario dichiarare:

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

Si potrebbe provare questo:

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

Il modo migliore

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