2008-12-05 13 views
10

Szukam niektórych informacji na temat routingu w MVC z C#. Obecnie jestem bardzo świadomy podstaw routingu w MVC, ale to, czego szukam, jest nieco trudne do znalezienia.Routing MVC - Nazwy parametrów pytanie

W rzeczywistości to, co chcę znaleźć, to sposób definiowania pojedynczej trasy, która przyjmuje pojedynczy parametr.

wspólnym przykładów znalazłem w Internecie jest wszystko opiera się na przykładzie

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{id}" 
    new { controller = "Default", action="Index", id=""}); 

Poprzez mapowanie tę trasę, można mapować do wszelkich działań w dowolnym kontrolerze, ale jeśli chcesz przekazać coś do działania, parametr metody musi być nazwany "id". Chcę znaleźć sposób obejścia tego, jeśli jest to możliwe, więc nie muszę ciągle określać tras, aby w moich działaniach używać innej nazwy parametru.

Czy ktoś ma jakieś pomysły lub znalazł sposób obejścia tego?

Odpowiedz

0

Można skonstruować trasy, jak chcesz

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{param1}/{param2}/{param3}" 
    new { controller = "Default", action="Index", param1="", param2="", param3=""}); 

Również look at this post, zawiera wszelkiego rodzaju próbek w sekcji komentarzy

+1

Trochę brakuje punktu ... chce mieć w zasadzie {kontroler} .mvc/{action}/{*} gdzie gwiazda jest dowolną nazwą parametru. –

+0

Tak, dziękuję Timothy. To jest poprawne. Może nie powiedziałem tego bardzo dobrze. – Jimmeh

+0

Nie jesteś pewien, czego chcesz, może możesz spróbować użyć opcji * Dla każdej wartości W requestContext.RouteData.Values ​​* i ich zapytania * value.Key * and * value.Value * –

5

Nie sądzę, że można to zrobić dokładnie, kim jesteś pytając. Kiedy MVC wywołuje akcję, wyszukuje parametry w trasach, paragrafach żądań i ciągu zapytania. Zawsze stara się dopasować nazwę parametru.

Być może stary, dobry ciąg zapytań spełni Twoje oczekiwania.

~/mycontroller/myaction/?foobar=123 

minie 123 do tej akcji:

public ActionResult MyAction(int? foobar) 
3

wiem, że to wieki temu, ale mam nadzieję, że jeszcze ktoś pomoże. Zadałem to samo pytanie wcześniej. Myślę, że właśnie tego szukasz. Odpowiedź cytowana z mojego pytania: "Bit {* pathInfo} nazywany jest ślimakiem, jest to w zasadzie symbol wieloznaczny" wszystko po tym punkcie jest wypchane do parametru o nazwie pathInfo ". Tak więc, jeśli masz" {zasób} .axd/{* pathInfo} "i adres URL podobny do tego: http://blah/foo.axd/foo/bar/baz/bing następnie tworzone są dwa parametry, jeden nazywający się zasobem, który zawierałby foo i jeden o nazwie pathInfo, który zawiera foo/bar/baz/bing."

+0

Naprawdę nie jest to odpowiedź na pytanie, ale +1 dla * -option – mhu

7

Jeśli chcesz mieć inną nazwę parametru i zachować tę samą zmienną routingu, użyj FromUri atrybut tak:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId) 
{ 
    // do stuff 
} 

w trasach, wszystko czego potrzebujesz to:

routes.MapRoute(
    "Default", 
    "{controller}.mvc/{action}/{id}" 
    new { controller = "Default", action="Index", id=""}); 
+0

Czy to nie tylko dla Web API, a nie dla MVC? – SilverlightFox

+0

@SilverlightFox masz rację, to niestety tylko interfejs sieciowy. Wygląda na to, że mvc 5 ma routing atrybutów, który może jednak pomóc. – Curtis

0

Chociaż nadal nie można użyć atrybutu FromUri, można jednak użyć atrybutu Route, tak jak

[Route("~/Policy/PriorAddressDelete/{sequence}")] 
public ActionResult PriorAddressDelete(int sequence) 
{ 
    Policy.RemoveScheduledPriorAddressItem(sequence); 
    return RedirectToAction("Information", new { id = Policy.Id }); 
} 

Technicznie dodaje to nową trasę, ale przynajmniej nie powoduje bałaganu w twoich routeconfig. Uporządkowuje definicję trasy według miejsca, w którym się znajduje, co lubię (mniej tropiam rzeczy).

Pamiętaj, aby korzystać z trasy atrybutów, to musi być w pliku routeconfig Powyższe twoi zdefiniowane trasy:

routes.MapMvcAttributeRoutes();