Лучший способ добавить фильтр к URL в .NET MVC - PullRequest
6 голосов
/ 23 марта 2012

Я постараюсь сделать это как можно более кратким.

  • Веб-страница содержит таблицу, которая позволяет фильтровать и сортировать
  • Изменения в фильтрации и сортировке должны быть отражены вURL, чтобы пользователь мог добавить в закладки или поделиться отфильтрованными представлениями.

Вопрос заключается в следующем: каково эффективное соглашение, позволяющее всем синтаксисам сортировки и фильтрации быть частью URL-адреса и легко интерпретировать / использовать его?на сервере без необходимости писать кучу нестандартного кода, который его интерпретирует?

Я провел некоторое исследование и натолкнулся на соглашения OData URI, и мне нравится, как они работают.http://www.odata.org/developers/protocols/uri-conventions

Дополнительные исследования показывают, что веб-API MVC 4 позволяет использовать это соглашение, возвращая IQueryable.Это выглядит фантастически, за исключением одной части ... В данный момент я не реализую RESTful API, и это все, с чем он работает.Итак, как я могу использовать что-то вроде OData и по-прежнему возвращать View или PartialView?Есть ли что-то, что преобразует соглашение OData URI в объект C #?

Если у кого-то есть какие-либо идеи по поводу этой проблемы или предложений, я весь слух.

Ответы [ 2 ]

0 голосов
/ 15 августа 2012

Я бы посмотрел на привязку пользовательской модели. Хороший обзор можно найти здесь: http://weblogs.asp.net/nmarun/archive/2010/02/25/asp-net-mvc-model-binding.aspx

Обычно он используется для запросов POST с формами, но нет никаких причин, по которым его нельзя использовать и для запросов GET.

По сути, ваш подход должен быть следующим:

  1. Создайте новый класс Model с параметрами фильтра / сортировки в качестве свойств:

    public class TableParameters {
         public string TableFilter { get; set; }
    }
    
  2. В действии вашего контроллера добавьте модель в качестве параметра

     public ActionResult TableAction(TableParameters parameters) { /* Action logic */ }
    
  3. Установите ваши параметры в URL, сказав:

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

У объекта параметров в вашем действии свойство будет заполнено значением из строки запроса.

0 голосов
/ 29 июня 2012

Что касается части соглашения, касающейся URL, я думаю, что вы ответили на свой вопрос с помощью OData. Что касается получения этих данных в объект C #, я бы использовал следующий подход:

Используйте фильтр действий, чтобы интерпретировать параметры URL и анализировать их в объекте c #. В вашем фильтре действий добавьте параметры url к данным маршрута, и объект c # будет доступен в вашем действии.

ASP.NET MVC Передача объекта из фильтра настраиваемых действий в действие

Взгляните на сетку Telerik MVC, они используют фильтр действий GridAction, который выполняет почти то, что вы просите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...