2012-03-22 23 views
6

Postaram się uczynić to tak zwięzłym, jak to tylko możliwe.Najlepszy sposób dodawania filtru do adresu URL w .NET MVC

  • internetowa zawiera tabelę, która pozwala na filtrowanie i sortowanie
  • Zmiany filtrowania i sortowania powinna znaleźć odzwierciedlenie w adresie URL, dzięki czemu użytkownik może zakładek lub podziel przefiltrowane widoki.

Pytanie brzmi: Co jest skutecznym konwencja pozwalając wszystkim składni sortowania i filtru, aby być częścią adresu URL i łatwo zinterpretować/używać go na serwerze bez konieczności pisania kilka kodu niestandardowego, który interpretuje to?

Zrobiłem kilka badań i natknąłem się na konwencje URI OData i podoba mi się sposób, w jaki robią różne rzeczy. http://www.odata.org/developers/protocols/uri-conventions

Więcej badań pokazuje, że interfejs API MVC 4 Web pozwala na użycie tej konwencji, zwracając IQueryable. Wygląda to fantastycznie, z wyjątkiem jednej części ... W tym momencie nie wdrażam RESTful API i tylko to wydaje się działać. Więc jak mogę użyć czegoś takiego jak OData i nadal zwracać widok lub PartialView? Czy istnieje coś, co będzie parsować konwencję URI OData w obiekt C#?

Jeśli ktoś ma jakiś wgląd w ten problem lub sugestie, jestem uszy.

+0

Kiedy mówisz MVC 4 Web Api, masz na myśli program Asp.Net? Jeśli tak, parametry adresu URL są automatycznie przekazywane do metod działania i będą interpretowane jako typ, który zadeklarujesz, tak jak w metodzie metody działania. –

+0

Tak, więc o nas o ASP.NET MVC i tak wiem, jak działają parametry z metodami działania. Problem polega na tym, że gdy wprowadzasz złożone filtry do adresu URL, wszystko staje się kosmate. Miałem nadzieję na konwencję/ramy, które sobie z tym poradzą. Internetowy interfejs API MVC 4 jest naprawdę bliski obsłużenia go dla mnie, ale koncentruje się na interfejsie API danych i potrzebuję zwykłych widoków i partialVies – Zifik

+0

W jaki sposób generujesz listę filtrów? Czy są przechowywane w bazie danych? Dynamicznie generowane z zestawu danych? Naprawiono na stronie? – Bobson

Odpowiedz

0

Jeśli chodzi o część dotyczącą adresu URL, myślę, że odpowiedziałeś na własne pytanie z OData. Jeśli chodzi o pobieranie tych danych do obiektu C#, użyłbym następującego podejścia:

Użyj filtra akcji, aby interpretować parametry adresu URL i przetworzyć je na obiekt C#. W filtrze akcji dodaj parametry adresu URL do danych trasy, a obiekt C# będzie dostępny w Twoim działaniu.

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

Spójrz na siatce Telerik MVC, ale korzystają z filtru działania GridAction który robi bardzo dużo, o co prosicie.

0

Spojrzę na niestandardowe powiązanie modelu. Dobry przegląd można znaleźć tutaj: http://weblogs.asp.net/nmarun/archive/2010/02/25/asp-net-mvc-model-binding.aspx

Zazwyczaj jest używany do wniosków o POST z formularzami, ale nie ma powodu, dla którego nie można go użyć do żądania GET.

Zasadniczo, twoje podejście powinno być:

  1. Utwórz nowy model klasy z filtrem/sortowania parametry jako właściwości:

    public class TableParameters { 
        public string TableFilter { get; set; } 
    } 
    
  2. W swoim działaniu sterownika, dodać model jako parametr

    public ActionResult TableAction(TableParameters parameters) { /* Action logic */ } 
    
  3. Ustaw swoje parametry w th e URL mówiąc:

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

Parametry obiektu w działaniu będzie miał właściwość wypełniona wartości z ciągu kwerendy.

+0

Warto również być świadomym strona bezpieczeństwa modelu wiążącego http://odetocode.com/blogs/scott/archive/2012/03/11/complete-guide-to-mass-assignment-in-asp-net-mvc.aspx – infl3x

Powiązane problemy