Pregunta

En primer lugar tiempo después,

He estado jugando con MVC un poco ... Tengo un punto de vista que tiene múltiples campos de entrada, algunos de estos campos puede estar en blanco en el poste.

El método de acción dentro del controlador para el puesto se ve algo como esto

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

He estado usando la extensión DynamicQuery que ha sido dando vueltas con el fin de realizar querys dinámicas Linq en mi base de datos y que he encapsulado esto en un objeto de búsqueda que se pasa a la capa de acceso a datos para execusion.

Sin embargo, también tiene un objeto ViewData medida por lo que se pasa de nuevo a la vista para la visualización de los valores de entrada y los resultados de la consulta.

Todo parece un poco desagradable en código como estoy teniendo para establecer tanto las propiedades Búsqueda objeto y los ViewDatas.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

}

¿Estoy pensando sobre esto y en realidad sólo debería pasar los valores de la capa de acceso a datos y poblar la ViewData en el controlador, o hay un patrón mucho más elegante o práctica que pueda usar?

Lo siento si esto parece volcado, no adjudicar de personas para intercambiar ideas y tiempo para cavar en el marco.

¿Fue útil?

Solución

De acuerdo con el fragmento de clase MemberViewData tiene la propiedad Resultados además de las propiedades de la clase de búsqueda. Así que el primer paso sería hacer MemberViewData derivan de búsqueda y definir un constructor que acepta instancia de búsqueda como parámetro y asigna sus propiedades básicas de la misma. A continuación me gustaría cambiar el método de acción, así:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}

Otros consejos

Utilice modelbinder para enlazar datos

Al igual que Tadeusz mencionó, un ModelBinder puede ayudar a construir el MemberViewData para usted, lo que dejaría sólo los resultados que se obtengan.

También puede decidir sobre la creación de un servicio de presentación que entiende cómo construir este objeto vista de datos y simplemente le delegue. Yo prefiero el enfoque del modelo ligante aquí, sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top