如何让Url.action生成操作方法名称

时间:2012-04-23 11:35:57

标签: asp.net-mvc-3

为什么此号召性用语不提供操作方法名称?

@Url.Action("Index","NewStore")

它只是产生......

localhost/TemplateUI/en-CA/Atomic/Wassabi/Store

我需要它来生成/索引......

1 个答案:

答案 0 :(得分:1)

这是因为Url.Action助手在Global.asax中使用您的路由注册。由于您将Index作为操作名称传递,我猜您在路径注册中指定了action="Index"的默认值,因此省略了它。

例如,如果您有以下默认路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

由于controller = "Home"action = "Index"约束已被指定,//Home都将是绝对等效的网址并调用Index Home行为控制器。

因此,当您尝试使用某些帮助程序构建网址时会发生同样的情况:它会使用您的路由。

如果您需要在网址中包含操作名称,请确保已删除路由定义中的action约束。