ASP.NET MVC: RouteUrl a Action

Przez ostatnie lata nie zajmowałem zbytnio się aplikacjami webowymi ale stopniowo zmienia się to. Z tego względu więcej na blogu można spodziewać się takiej tematyki. Powoli sobie wszystko przypominam. Prawdopodobnie dla wielu z Was będą to podstawy ale mam nadzieję, że komuś przydadzą się takie wpisy.

W poście chciałbym pokazać czym różni się RouteUrl od Action. Zacznijmy następującej metody:

public ActionResult Index()
{
  string action = Url.Action("Index");
  string route = Url.RouteUrl("CustomRoute2");

  Response.Write(string.Format("Action: {0}<br/>",action));
  Response.Write(string.Format("Action: {0}", route));

  return View();
}

Action służy do generowania linku na podstawie przekazanych danych o akcji, kontrolerze itp. Route robi dokładnie to samo, z tym, że można przekazać dokładnie z jakiego route ma korzystać. Action wybierze po prostu pierwszy zdefiniowany routing. Przyjrzyjmy się naszej konfiguracji:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute("CustomRoute1", "OldApp/{action}/{id}", new {controller = "Home", action = "Index", id = UrlParameter.Optional});
routes.MapRoute("CustomRoute2", "App/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

routes.MapRoute(
 "Default", // Route name
 "{controller}/{action}/{id}", // URL with parameters
 new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
);

Pierwsza dopasowana to CustomRoute1. Zatem Action wyświetli OldApp/Nazwa Kontrolera/Nazwa Akcji. Z kolei do wywołania RouteUrl przekazujemy dokładnie nazwę konfiguracji, co oznacza, że zostanie wygenerowany link w postaci App/. Możliwe oczywiście jest korzystanie z tych funkcji w widoku. Analogicznie istnieje funkcja RouteLink, która wykonuje podobne zadanie co ActionLink, z tym, że wygenerowany link wykorzystuje konkretny routing.

Warto zaznaczyć, że lepiej unikać generowania linków dla specyficznego routingu. W kodzie unikamy ręcznego wpisywania <a href …/>, aby nie być zależnym od routingu. ActionLink wygeneruje link poprawny dla danej konfiguracji. Jeśli zmienimy zatem routing w międzyczasie, ActionLink odzwierciedli to  w przeciwieństwie do sztywno przypisanego <a href…/>.

One thought on “ASP.NET MVC: RouteUrl a Action”

  1. A jeszcze lepiej uzyc T4MVC dzieki czemu pozbedziemy sie magicznych stringow i wprzypadku zmiany nazwy metody/kntorlera od razu wylapiemy blad

Leave a Reply

Your email address will not be published.