2009-06-09 8 views
40

Mam stronę routowaną jak /Comments/Search/3, gdzie szukam i wyświetlam wszystkie komentarze wątku "3".ASP.NET MVC: routing URL vs querystring

Dodaję funkcję sortowania (według daty, autora itp.). Jaki jest najlepszy sposób, aby sobie z tym poradzić? /Comments/Search/3/Sort/Author lub /Comments/Search/3?sort=author?

W jaki sposób automatycznie obsłużyć sortowanie_kolumny = autor jako parametr w MVC?

Dzięki

Odpowiedz

57

Wolę:/Komentarze/Szukaj/3? Sort = autor. Querystring jest dobrym miejscem do przekazywania parametrów programowych, zwłaszcza jeśli parametr (jak w tym przypadku) nie jest ważny dla celów SEO. Jeśli parametr miał znaczenie semantyczne jako wyszukiwany termin, pierwszy URL byłby lepszy.

W metodzie kontrolera można użyć coś takiego:

public ActionResult Search(int id, string sort) 

ASP.NET MVC będzie automatycznie drut kwerendy wartości parametrów swojej metody.

Użyj następującego trasa

routes.MapRoute(
        "Default",            // Route name 
        "{controller}/{action}/{id}",       // URL with parameters 
        new { controller = "Comments", action = "Search", id = "" } // Parameter defaults 
       ); 

/komentarze/Szukaj/3? Sort = autor wezwie Search (3, "autor")

/komentarze/Szukaj/3 wezwie wyszukiwania (3 , null)

Należy pamiętać, że id jest obowiązkowe więc url zawiedzie: /Komentarze/Szukaj

+0

myślę, że pójdę do tego rozwiązania. Jak ustawić trasę i ustawić wartość domyślną, ponieważ sort = 3 jest opcjonalne? – pistacchio

+0

Z powodu konwencji dotyczącej konfiguracji, należy pamiętać, że parametry dla danej metody MUSZĄ być nazywane odpowiednio "id" i "sort". –

+2

W MVC 2 możesz użyć UrlParameter.Optional iw parametrze akcji użyć 'int? id' zamiast "int id", jeśli chcesz, aby był opcjonalny, a '/ Comments/Search', aby pokazać domyślny interfejs wyszukiwania z pustym tekstem wejściowym. – CallMeLaNN

19

ASP.NET MVC, który zajmie się automatycznie w przypadku ciąg kwerendy. Po prostu dodajecie do swojej akcji parametr string sort.

Co jest lepsze? Osobiście używam ścieżki do kontrolowania wyświetlanych i powtarzających się treści, aby kontrolować prezentację (w jaki sposób jest wyświetlany, sformatowany, ...). Więc do sortowania użyłbym metody querystring. Ale nie sądzę, że w obu podejściach istnieje techniczna niedogodność.