Как предотвратить действие `Index`, появляющееся в моих URL ASP.NET MVC2? - PullRequest
0 голосов
/ 09 октября 2010

У меня есть маршрут, который выглядит следующим образом (но я пробовал несколько разных):

routes.MapRoute(
  "Metrics",
  "Metrics/{action}/{id}/{resource}/{period}",
  new { controller = "Metrics" }
);

На MetricsController у меня есть следующие действия:

// Index sets up our UI
public ActionResult Index(int id, string resource, string period)

// GetMetrics returns json consumed by ajax graphing tool
public JsonResult GetMetrics(int id, string resource, string period)

Как мне генерировать ссылки и не иметь Index в URL, чтобы я мог это сделать?:

/Metrics/1234/cpu-0/10m  -> 
           MetricsController.Index(id, string resource, string period)

/Metrics/GetMetrics/1234/cpu-0/10m -> 
           MetricsController.GetMetrics(int id, string resource, string period)

Я пробовал всевозможные заклинания Html.ActionLink и Html.RouteLink, но без радости.

Ответы [ 2 ]

1 голос
/ 09 октября 2010

Для этого могут потребоваться два маршрута, поскольку необязательные параметры могут быть только в конце определения маршрута:

routes.MapRoute(
    "ActionlessMetrics",
    "Metrics/{id}/{resource}/{period}",
    new { controller = "Metrics", action = "Index" }
);

routes.MapRoute(
    "Metrics",
    "Metrics/{action}/{id}/{resource}/{period}",
    new { controller = "Metrics" }
);

И для генерации этих ссылок:

<%= Html.ActionLink("Link1", "Index", "Metrics", 
    new { id = 123, resource = "cpu-0", period = "10" }, null) %>
<%= Html.ActionLink("Link2", "GetMetrics", "Metrics", 
    new { id = 123, resource = "cpu-0", period = "10" }, null) %>

Что приведет к:

<a href="/Metrics/123/cpu-0/10">Link1</a>
<a href="/Metrics/GetMetrics/123/cpu-0/10">Link2</a>

и выбрано правильное действие.

0 голосов
/ 19 октября 2010

хммм этот метод на самом деле не делает это для меня в mvc2. Независимо от того, какое имя метода действия все еще отображается в URL, независимо от наличия маршрута, как указано выше. Html.ActionLink все еще помещает в индекс, такой как: <%: Html.ActionLink ("Link1", "Index", "Metrics", new {id = 10}, new {@class = "font11"})%>

по-прежнему создает индекс в ссылке.

...