簡體   English   中英

在兩條不同的路線之間導航時,AspNetMvc會附加網址

[英]AspNetMvc appends url when navigating between two different routes

我的mvc網站中有一個名為adpan的區域,具有以下路由配置:

context.MapRoute(
     "adpan_clinics",
     "adpan/DoctorClinics/{doctorObj}/{controller}/{action}/{clinicObj}",
     new { action = "Index", Controller = "Clinics", clinicObj = UrlParameter.Optional }
     );

context.MapRoute(
    "adpan_default",
    "adpan/{controller}/{action}/{obj}",
    new { action = "Index", Controller = "Dashboard", obj = UrlParameter.Optional }
    );

我使用T4MVC進行路由。 直到我想航線從adpan_clinics回用行動鏈接adpan_default一切工作正常。

場景)我有以下網址:

第一個網址) http:// localhost / adpan / Doctors / Index

第二個網址) http:// localhost / adpan / DoctorClinics / doctor1 / Clinics / index

我可以使用一個網址視圖上的操作鏈接重定向到第二個網址 ,如下所示:

 @Html.ActionLink("Manage Clinics", MVC.adpan.Clinics.Index().AddRouteValues(new { doctorObj = item.Url }))

但是,當使用以下操作鏈接重定向回第一網址時 ,我面臨網址附加問題:

 @Html.ActionLink("Back to Doctors", MVC.adpan.Doctors.Index())

該操作鏈接為我提供了以下錯誤網址,而不是第一網址 (盡管頁面正確加載!):

錯誤的網址) http:// localhost / adpan / DoctorClinics / doctor1 / Doctors

注意:我也嘗試過不使用T4MVC並在操作鏈接參數中指定空值,如下所示,但仍然得到錯誤的url

@Html.ActionLink("Back to Doctors", "Index", "Doctors", null, null)

我只是在adpan地區工作,有2條路線。

我將不勝感激任何解決方案,如果可能的話,請從該錯誤的url獲取正確視圖的原因。

路由值不僅從ActionLink的參數中提供,還會從當前請求中泄漏 盡管很多人不覺得這很直觀,但是這樣做確實很容易,例如保持在當前的文化或網站區域之內。

路由值不適用於元數據。 它們是匹配URL模式或確定用於構建傳出URL的路由時將使用的值。 我懷疑這就是您要解決的問題,因為將路由值設置為URL很不尋常。

如果您需要將元數據與路由信息一起傳遞,則有一個DataTokens屬性用於該目的。 當兩者都通過請求傳遞時,僅使用路由值來確定路由是否匹配。

通過顯式指定路由值,也可以覆蓋當前請求中的路由值。

@Html.RouteLink("foobar", new { controller = "Home", action = "Index", doctorObj = "" })

但是由於您需要在每個受影響的鏈路上執行此操作,因此首先將無效數據排除在路由值之外更為實際。

根據@ NightOwl888的答案以及RouteLink和ActionLink之間的區別 ,我找到了硬編碼方法和T4MVC方​​法的解決方案。

1)硬編碼方式 :必須指定路由名稱:

//signiture: RouteLink(this HtmlHelper htmlHelper, string linkText, string routeName, object routeValues);
@Html.RouteLink("Back to Doctors","adpan_default", new { controller = "Doctors", action = "Index"})

產生的網址: http:// localhost / adpan / Doctors

2)T4MVC的方法 :必須指定路由名稱:

//signiture: RouteLink(this HtmlHelper htmlHelper, string linkText, string routeName, ActionResult result, IDictionary<string, object> htmlAttributes)
@Html.RouteLink("Back to Doctors","adpan_default", MVC.adpan.Doctors.Index().AddRouteValues(new {Area=""}), null)

產生的網址: http:// localhost / adpan / Doctors

為什么要使用AddRouteValues(new {Area =“”})

由於此處的討論,它似乎是T4MVC中的錯誤。 在路線鏈接下方,將?Area = adpan作為無效參數添加到url:

@Html.RouteLink("Back to Doctors", "adpan_default", MVC.adpan.Doctors.Index(), null)

結果網址: http:// localhost / adpan / Doctors?Area = adpan

但是,這可能是欺騙T4MVC中不需要的url參數的技巧。

暫無
暫無

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

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