我的路线看起来像这样(但我尝试过几种不同的路线):
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
以便我可以执行此操作?:
/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
的咒语,但没有任何喜悦。
答案 0 :(得分:1)
您可能需要两条路线,因为可选参数只能位于路线定义的末尾:
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>
并选择了适当的行动。
答案 1 :(得分:0)
嗯,这个方法实际上似乎并没有在mvc2中为我做这件事。无论动作方法名称仍然出现在URL中,无论是否具有上述路线。 Html.ActionLink仍然放入如下索引: &lt;%:Html.ActionLink(“Link1”,“Index”,“Metrics”,new {id = 10},new {@class =“font11”})%&gt;
仍在链接中生成索引。