2012-03-22 9 views
6

Trataré de hacer esto lo más conciso posible.La mejor manera de agregar filtro a la URL en .NET MVC

  • página web contiene una tabla que permite el filtrado y clasificación
  • Cambios en filtrado y la clasificación debería reflejarse en la URL que el usuario pueda marcador o compartir vistas filtradas.

La pregunta es: ¿Qué es una convención eficaz de permitir que toda la sintaxis de ordenar y filtrar a ser parte de la URL y fácil interpretar/usarlo en el servidor sin tener que escribir un montón de código personalizado que interpreta ¿eso?

He estado investigando un poco y me encontré con las convenciones OData URI y me gusta la manera en que hacen las cosas. http://www.odata.org/developers/protocols/uri-conventions

Más investigaciones muestran que el MVC 4 Web API permite el uso de esa convención al devolver un IQueryable. Esto se ve fantástico, excepto por una parte ... No estoy implementando una API RESTful en este momento y eso es todo lo que parece funcionar. Entonces, ¿cómo puedo usar algo como OData y aun así devolver una Vista o una Vista parcial? ¿Hay algo que analice la convención OData URI en un objeto C#?

Si alguien tiene alguna idea sobre este problema o sugerencias, soy todo oídos.

+0

Cuando dices MVC 4 Web Api, ¿te refieres a Asp.Net's? De ser así, los parámetros de la url se pasan automáticamente a los métodos de acción y se interpretarán como el tipo que los declaras como en la firma del método de acción. –

+0

Sí, así nosotros sobre ASP.NET MVC y sí sé cómo los parámetros funcionan con métodos de acción. El problema es que cuando te pones a poner filtros complejos en la URL, las cosas se ponen feas. Esperaba una convención/marco que lo manejara por mí. La API web de MVC 4 está realmente cerca de manejarla, pero está enfocada en API de datos y necesito vistas regulares y PartialVies – Zifik

+0

¿Cómo está generando su lista de filtros en primer lugar? ¿Están almacenados en una base de datos? ¿Generado dinámicamente a partir del conjunto de datos? ¿Codificado en la página? – Bobson

Respuesta

0

En cuanto a la parte de la convención de url de su pregunta, creo que ha respondido su propia pregunta con OData. En cuanto a obtener estos datos en un objeto C# usaría el siguiente enfoque:

Use un filtro de acción para interpetar los parámetros url y analizarlos en un objeto C#. En su filtro de acción, agregue los parámetros url a los datos de ruta y el objeto C# estará disponible en su acción.

ASP.NET MVC Pass object from Custom Action Filter to Action

Tome un vistazo a la red Telerik MVC, que utilizan un filtro de acción GridAction que hace más o menos lo que están pidiendo.

0

Me gustaría ver el enlace de modelo personalizado. Puede encontrar una buena descripción aquí: http://weblogs.asp.net/nmarun/archive/2010/02/25/asp-net-mvc-model-binding.aspx

Normalmente se utiliza para solicitudes POST con formularios, pero no hay ninguna razón por la cual no pueda usarlo también para solicitudes GET.

Básicamente, su enfoque debe ser:

  1. crear una nueva clase de modelo con su filtro/clasificación parámetros como propiedades:

    public class TableParameters { 
        public string TableFilter { get; set; } 
    } 
    
  2. En Acción de tu controlador, agregue el modelo como un parámetro

    public ActionResult TableAction(TableParameters parameters) { /* Action logic */ } 
    
  3. Configure sus parámetros en th e URL diciendo:

    /Controller/TableAction?TableFilter=[your-filter-string] 
    

Los parámetros del objeto en su acción tendrá la propiedad rellena con el valor de la cadena de consulta.

+0

También vale la pena tener en cuenta el Lado de seguridad de la vinculación del modelo http://odetocode.com/blogs/scott/archive/2012/03/11/complete-guide-to-mass-assignment-in-asp-net-mvc.aspx – infl3x

Cuestiones relacionadas