with selectlistitem property mvc dropdownlist data custom c# asp.net-mvc asp.net-mvc-3 razor html.dropdownlistfor

c# - mvc - selectlistitem add property



DropDownListFor con un atributo personalizado con-en nombre de atributo? (2)

Ah, es fácil.
El error fue declarar un diccionario de <string, string> lugar de un diccionario de <string, object> (y usar variables en lugar de propiedades en cOption) ...


Con el diccionario de <string, string> usa el objeto "paramlist" sobrecarga, en vez de IDictionary<string, object> ;)

@Html.DropDownListFor(model => model.Title, new SelectList(Model.ls, "value", "text"), Model.nvc) <!-- @Html.DropDownList("myIdAndName", new SelectList(Model.ls, "value", "text"), Model.nvc) --> public ActionResult Index() { cHomeModel HomeModel = new cHomeModel(); HomeModel.nvc.Add("class", "chzn-select"); HomeModel.nvc.Add("data-placeholder", "Choose a customer"); HomeModel.nvc.Add("style", "width:350px;"); HomeModel.nvc.Add("tabindex", "1"); HomeModel.nvc.Add("multiple", "multiple"); HomeModel.nvc.Add("id", "lol"); cOption option = null; for (int i = 0; i < 10; ++i) { option = new cOption(); option.value = i.ToString(); option.text = "text" + i.ToString(); HomeModel.ls.Add(option); } return View(HomeModel); } public class cOption { public string value { get; set; } public string text { get; set; } } public class cHomeModel { public string Title = "MyDropDownListName"; public List<cOption> ls = new List<cOption>(); public System.Collections.Generic.Dictionary<string, object> nvc = new System.Collections.Generic.Dictionary<string, object>(); }

o más Linqiq:

public ActionResult Index() { cHomeModel HomeModel = new cHomeModel(); HomeModel.nvc.Add("class", "chzn-select"); HomeModel.nvc.Add("data-placeholder", "Choose a customer"); HomeModel.nvc.Add("style", "width:350px;"); HomeModel.nvc.Add("tabindex", "1"); HomeModel.nvc.Add("multiple", "multiple"); HomeModel.nvc.Add("id", "lol"); HomeModel.ls = System.Linq.Enumerable.Range(0, 9) .Select(x => new cOption() { text = x.ToString(), value = x.ToString() }) .ToList(); // or otherwise: HomeModel.ls = ( from i in System.Linq.Enumerable.Range(0, 9) select new cOption() { text = i.ToString(), value = i.ToString() } ).ToList(); return View(HomeModel); }

Pregunta: Necesito crear una lista desplegable como esta:

<select id="ddCustomers" data-placeholder="Choose a customer" class="chzn-select" style="width:350px;" tabindex="1" multiple>

Ahora puedo agregar atributos personalizados como este:

@Html.DropDownListFor(m => m.Id, Model.Values, new { @disabled = "disabled" })

Desafortunadamente, si hay un "-" en el nombre de la variable, entonces no se compila.

@Html.DropDownListFor(m => m.Id, Model.Values, new { @disabled = "disabled", @data-placeholder = "whatever" })

¿Y qué hay del múltiplo, que no tiene ningún valor de atributo?

Si paso un Dictionary o NameValueColletion en lugar de la new { @disabled = "disabled" } , se muestran las propiedades de NameValueColletion / Dictionary ...

¿Cómo puedo pasar atributos con caracteres especiales en la clave de atributo?


Use un guión bajo en su lugar

@data_placeholder = "whatever"

Como Mvc3 "_" se reemplaza por "-" cuando se procesa.

Esto funciona bien ya que los guiones bajos no son aceptables en los nombres de atributos en html.