簡體   English   中英

如何使用在路由配置中注冊的自定義路由創建RouteLink?

[英]How create RouteLink with custom routes registered in route config?

我在RouteConfig中有此路由:

routes.MapRoute(
                name: "AdminGroupsEdit",
                url: "admin/groups/{id}",
                defaults: new { controller = "Group", action = "Edit" }
            );
routes.MapRoute(
                name: "AdminGroupsEditStudent",
                url: "admin/groups/{id}/students/{studentid}",
                defaults: new { controller = "Student", action = "Edit" }
            );
routes.MapRoute(
                name: "AdminGroupsCreateStudent",
                url: "admin/groups/{groupId}/students/create-student",
                defaults: new { controller = "Student", action = "Create" }
            );

當我在頁面上使用iri時:

管理員/組/ 1

有一個RouteLink:

@Html.RouteLink("Add", routeName: "AdminGroupsCreateStudent", routeValues: null, htmlAttributes: new { @class = "btn btn-success" })

但是,當我單擊它時,asp.net將以“ AdminGroupsEdit”名稱進行路由。 如何創建RouteLink以使用“ AdminGroupsCreateStudent”名稱進行路由? 如果我需要傳遞groupId拋出routeValues,那么如何從Uri獲得它?

我可以看到一些有關當前路由方式的問題,因此,下面將詳細介紹解決問題的建議。

  1. 在您的示例中,路由引擎所能理解的只是您嘗試創建指向路由名稱AdminGroupsCreateStudent的Url的過程。 路由引擎可以確認它具有名稱為AdminGroupsCreateStudent的路由,但是當嘗試將路由值與參數進行匹配時,由於您嘗試傳遞null且該路由需要一個參數groupId ,因此它無法繼續。為了成功,它會返回引用您所在頁面的路線。
  2. 通過在Url中途創建一個參數,路由引擎期望該路由的值能夠成功呈現。 令人遺憾的是,即使嘗試為groupId參數賦值UrlParameter.Optional ,您在運行時仍然會遇到相同的問題,因為引擎再次無法在Url中間使用null參數做任何事情,因為它非常清楚它會斷開鏈接,這是將參數放在末尾或具有默認值的原因。

我的建議是執行以下任一操作:

groupId添加到路由Url的末尾,並將默認值設置為UrlParameter.Optional

 routes.MapRoute(
                name: "AdminGroupsCreateStudent",
                url: "admin/groups/students/create-student/{groupId}",
                defaults: new { controller = "Student", action = "Create", groupId = UrlParameter.Optional }
            );

或者,如果您需要適當使用此Url,則只需為groupId設置默認值即可處理null ,然后在“ Create操作中管理此值的邏輯。

routes.MapRoute(
                name: "AdminGroupsCreateStudent",
                url: "admin/groups/{groupId}/students/create-student",
                defaults: new { controller = "Student", action = "Create", groupId = 0 } //0 == Unknown
            );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM