Estoy usando MVC3 con vistas Razor y me gustaría construir DropDownLists reutilizables para varias de mis clases, pero después de mucha búsqueda no he encontrado un ejemplo que funcione exactamente como lo necesito. ..Plantilla de editor reutilizable con DropDownList para objetos comerciales
para este ejemplo tengo dos clases de este tipo: -
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public Group Group { get; set; }
}
public class Group
{
public int ID { get; set; }
public string Name { get; set; }
}
tengo un controlador/Ver trabajando para persona. La vista tiene un control DropDownListFor:
@model Person
...
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
la vista utiliza la clase Persona directa, no un modelo de intermediario, ya que no he encontrado una razón de peso para un resumen de la otra en esta etapa.
Lo anterior funciona bien ... en el controlador tomo el valor de Group.ID en la Persona devuelta desde la vista, lo busco y configuro Person.Group para el resultado. Funciona, pero no es ideal
He encontrado una carpeta aquí: MVC DropDownList values posted to model aren't bound que me resolverá esto, pero aún no lo he conseguido ... ya que realmente me parece útil si puedo reutilizarlo.
Lo que me gustaría hacer es tener algo como esto en una plantilla: -
@model Group
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
y utilizarlo en una vista como esta: -
@Html.EditorFor(o => o.Group)
No obstante lo anterior doesn' Parece que funciona ... el editor de arriba para la línea inserta editores para toda la clase (por ejemplo, un cuadro de texto para Group.Description también) ... en lugar de insertar un DropDownList con mis grupos enumerados
Tengo el t arriba En un archivo llamado Group.cshtml en Vistas/Compartidas/EditorTemplates
Si esto funcionó, cada vez que una clase tenga una propiedad de tipo Grupo, este editor DropDownList se usaría por defecto (o al menos si se especifica con algún atributo))
Gracias de antemano por cualquier consejo proporcionado ...
Esta es una buena respuesta. Me gustaría agregar que puede decirle al 'EditorFor' dónde buscar plantillas (por ejemplo, si desea usar diferentes plantillas en una vista por bases de vista). Se ve así: '@ Html.EditorFor (x => x.Filters.SelectedImprintId," ~/Views/Books/EditorTemplates ", Model.Filters.ImprintItems)' –