2017-03-07 154 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