¿Existe una manera simple de agregar una opción predeterminada "--Please select--" a DropDownListFor en MVC 3?DropdownListPara el valor predeterminado
Respuesta
Por lo tanto, hice algo como esto:
@Html.DropDownListFor(model => model.Dessert,
new SelectList(Model.AvailableDesserts, "DessertID", "DessertName"),
"---Select A Dessert ---")
parece funcionar bastante bien. Dessert
en mi modelo de vista es el seleccionado por el usuario. AvailableDesserts
es una colección de unos para elegir. Espero que ayude.
que tienen un métodos de extensión de los pares en SelectList
public static SelectList PreAppend(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
{
var items = new List<SelectListItem>();
items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
items.AddRange(list.Items.Cast<SelectListItem>().ToList());
return new SelectList(items, "Value", "Text");
}
public static SelectList Append(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
{
var items = list.Items.Cast<SelectListItem>().ToList();
items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
return new SelectList(items, "Value", "Text");
}
public static SelectList Default(this SelectList list,string DataTextField,string SelectedValue)
{
return list.PreAppend(DataTextField, SelectedValue, true);
}
Entonces mi maquinilla de afeitar que parece:
@Html.DropDownListFor(m=>m.SelectedState,
Model.StateList().Default("Select One",""))
Soy nuevo en MVC, ¿puede por favor? dime cómo agregaría métodos de extensión a mi lista de selección – user517406
Agregue una clase estática a su proyecto y agregue estos métodos a ella. Asegúrese de que la página a la que intenta llamar importará el espacio de nombres si no es el espacio de nombres del proyecto global. La sintaxis en la máquina de afeitar es '@usando Myproject.Extensions' o lo que sea que nombre su clase. Para obtener más información, lea: http://msdn.microsoft.com/en-us/library/bb383977.aspx – asawyer
Preferiría la ruta de Ayuda/Extensión tal como lo propone, pero tengo problemas para implementarla. Aparece el siguiente error: 'No se puede convertir el objeto de tipo 'MyApp.UI.Models.Address' para escribir 'System.Web.Mvc.SelectListItem'.' El código que uso es:' @ Html.DropDownListFor (m => m.EmailAddressID, nueva SelectList (Model.Addresses, "AddressID", "EmailAddress"). PreAppend ("--- Seleccione una dirección ---", "")) 'Se compila bien y se reconoce en la Vista, pero presenta el error anterior en tiempo de ejecución. El método de hardcoded presentado por @itsmatt funciona. ¿Alguna idea sobre la modificación que pueda necesitar para los métodos de extensión? – atconway
Hola ¿qué hay de tratar esto (en caso de que utilice el método DisplayFor)
private IEnumerable<SelectListItem> AddDefaultOption(IEnumerable<SelectListItem> list, string dataTextField, string selectedValue)
{
var items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = dataTextField, Value = selectedValue});
items.AddRange(list);
return items;
}
A continuación, simplemente agregue este código a su Controlador
//lambda expression binding
ViewBag.YourList = db.YourTable.Select(x => x).ToList().Select(x => new SelectListItem
{
Value = x.Id.ToString(),
Text = x.DisplayName.ToString()
});
ViewBag.YourList = AddDefaultOption(ViewBag.YourList, "Select One...", "null", true);
Y, finalmente, a la vista que podría mostrar una lista desplegable, cuadro combinado al igual que este
<div class="editor-label">
Your Label
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ForeignKey, (IEnumerable<SelectListItem>)ViewBag.YourList)
</div>
Es extraño que estés haciendo el '.Select (x => x) .ToList()' antes del ' .Seleccione (x => new SelectListItem' Eso no es necesario. –
quería establecer el valor predeterminado a todo lo que se pasa como un parámetro de URL llamado SiteType:
<div class="form-group">
@Html.LabelFor(model => model.Type, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.Type, ChangeOrderSite.SiteTypeNames.Select(s => new SelectListItem { Text = s.Value, Value = s.Key.ToString(), Selected = s.Key.ToString() == Request["SiteType"] }), new { @class = "control-label col-md-2" })
@Html.ValidationMessageFor(model => model.Type)
</div>
</div>
Mi menú desplegable es una lista de tipos de sitios.
- 1. ASP.NET MVC DropDownListPara no seleccionar el valor del modelo
- 2. bash asignar el valor predeterminado
- 3. Modificar el valor hash predeterminado
- 4. Enlace DropDownListPara ayuda a un diccionario
- 5. Android CheckBoxPreference Valor predeterminado
- 6. Html.EditorFor Establecer valor predeterminado
- 7. scipy.sparse valor predeterminado
- 8. Valor predeterminado de BOOL
- 9. Hibernate valor predeterminado hbm2ddl.auto
- 10. Yii DROPDOWNLIST valor predeterminado
- 11. valor genérico predeterminado
- 12. RingtonePreference valor predeterminado
- 13. valor predeterminado del puntero.
- 14. El valor predeterminado de ListPreference no aparece
- 15. getIntExtra siempre devuelve el valor predeterminado
- 16. Valor predeterminado para el constructor de atributos?
- 17. Valor predeterminado para el argumento boost :: function?
- 18. Valor predeterminado para el parámetro de función?
- 19. FormsAuthentication.GetRedirectUrl siempre devuelve el valor predeterminado
- 20. ¿El valor predeterminado es int * NULL?
- 21. ¿De dónde viene el valor predeterminado mb_internal_encoding()?
- 22. ¿Establecer el valor predeterminado en un DataContract?
- 23. sinónimo más corto para el valor predeterminado
- 24. ¿Cómo agregar el valor predeterminado en SQLite?
- 25. WPF: definir el valor predeterminado de enlace
- 26. Cómo establecer el valor predeterminado en Hibernar
- 27. OpcionalAttribuir el valor predeterminado del parámetro?
- 28. Establecer el valor predeterminado en JAXB
- 29. Creando DropDownListPara elementos en la vista
- 30. @RequestParam defaultvalue no acepta el valor enum como valor predeterminado
Esto agrega un "--Seleccione--" en la parte superior del menú desplegable, pero se establece de manera predeterminada en el siguiente elemento del menú desplegable, al menos en mi ejemplo: @ Html.DropDownListFor ( x => x.SelectedTeamID, new SelectList (Model.Teams, "TeamID", "TeamName"), "- Seleccione -") – user517406
¿Cuál es el valor predeterminado del SelectedTeamID que está enviando a la Vista? En mi 'Create.cshtml' se usará de forma predeterminada la opción" --- Seleccionar un postre --- "(el ID es un entero y por defecto es 0) mientras que en mi' Edit.cshtml' se usará de manera predeterminada lo que sea el valor actual es para 'model.Dessert' en mi viewmodel. Esto puede ser el resultado de mis DessertIds comenzando en 1 (la clave principal en mi tabla de postres comienza en 1). Solo una conjetura, realmente. Creo que es por eso que está sucediendo. – itsmatt
Creo que lo que hace es mirar el valor actual del campo modelo y luego seleccionarlo de manera predeterminada. Por ejemplo, si cuando construyó su modelo de vista (por ejemplo, para Crear llamada) y establece explícitamente el ID de equipo seleccionado en 6 y lo pasó a la Vista, mostraría el nombre de equipo asociado con TeamID 6, suponiendo que existiera uno. – itsmatt