[英]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獲得它?
我可以看到一些有關當前路由方式的問題,因此,下面將詳細介紹解決問題的建議。
AdminGroupsCreateStudent
的Url的過程。 路由引擎可以確認它具有名稱為AdminGroupsCreateStudent
的路由,但是當嘗試將路由值與參數進行匹配時,由於您嘗試傳遞null
且該路由需要一個參數groupId
,因此它無法繼續。為了成功,它會返回引用您所在頁面的路線。 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.