2017-03-07 155 views
2
不工作

我创造一个友好的URL,所以我有routeconfig文件克里特岛路线如下自定义路由在MVC

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

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Auth", action = "LogIn", id = UrlParameter.Optional } 
     ); 
     routes.MapRoute(
      name: "ShowUser",            // Route name 
      url: "{controller}/{action}/{id}",       // URL with parameters 
      defaults: new { controller = "UserGroupEdit", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 
    } 

和跳转链接如下

<a href="@Url.Action("Index", "ShowUser")" onclick="javascript:onBegin()">View</a> 

但它不工作给予运行时错误“无法找到资源。”

+0

你得到什么错误? –

+0

'/'应用程序中的服务器错误。 找不到资源。 描述:HTTP 404.您正在查找的资源(或其某个依赖项)可能已被删除,名称已更改或暂时不可用。请检查以下网址并确保它拼写正确。 请求的URL:/ ShowUser/Index –

+0

即使访问自定义路由的方式不正确,默认路由也应该可用。确保'RouteConfig.RegisterRoutes(RouteTable.Routes);'在'Application_Start'事件中。你可以显示控制器和操作方法? – Win

回答

2

默认路由和您的自定义路由具有相同的结构,因此默认路由将始终使用,因为它是首先声明的。 林猜测你得到错误,因为在代码中你指的是ShowUser,但相反,你应该使用控制器的名称:UserGroupEdit。

<a href="@Url.Action("Index", "UserGroupEdit")" onclick="javascript:onBegin()">View</a> 
+0

实际上,我的要求是在网址栏中提供用户友好的网址而不是UserGroupEdit/Index,它必须显示ShowUser/Index栏。 –

+0

@ C.jacking查看我的答案上面的解决方案 –

+0

您可以使用Route属性,然后:将[Route(“ShowUser”)]作为链接使用View

1

如果你想有一个友好的路线,你可以做这样的事情

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

    routes.MapRoute(
     name: "ShowUser",            // Route name 
     url: "ShowUser/index/{id}",       // URL with parameters 
     defaults: new { controller = "UserGroupEdit", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Auth", action = "LogIn", id = UrlParameter.Optional } 
    ); 

} 

cshtml

@Url.Action("Index", "UserGroupEdit") 
+0

实际上,我的要求是在url栏中提供用户友好的URL而不是UserGroupEdit/Index,它必须显示ShowUser/Index栏。 –

+0

在这两个如果选项我提供的网址显示“showuser/index” –

+0

如果我重命名控制器名称,然后我需要更改多个地方,这就是为什么我使用自定义网址 –

0

您可以使用UrlHelper.RouteUrl helper方法,它允许你指定路线名称:

<a href="@Url.RouteUrl("ShowUser", new { action = "Index" })" onclick="javascript:onBegin()">View</a> 

RouteConfig:

routes.MapRoute(
    name: "ShowUser", 
    url: "ShowUser/{action}/{id}", 
    defaults: new { controller = "UserGroupEdit", action = "Index", id = UrlParameter.Optional } 
); 

参考link

+0

nope仍然无法正常工作。它正在生成“http:// localhost:52155/ShowUser”和错误加载页面“/'应用程序中的服务器错误。 无法找到资源。” –

+0

更新您的routeconfig,如上所示。 你也可以使用'Route'属性来实现你正在寻找的东西。看看@ Win的回答 – rageit