![](/img/trans.png)
[英]Navigating between different Views from two different Application Projects within a Solution in MVC ASP.NET
[英]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.