我的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 。
场景)我有以下网址:
1st url) http://localhost/adpan/Doctors/Index
第二个网址) http://localhost/adpan/DoctorClinics/doctor1/Clinics/index
我可以使用 1st url&#39> 视图中的操作链接重定向到 2nd url ,如下所示:
@Html.ActionLink("Manage Clinics", MVC.adpan.Clinics.Index().AddRouteValues(new { doctorObj = item.Url }))
但是,当使用以下操作链接重定向回 1st url 时,我会面临网址追加问题:
@Html.ActionLink("Back to Doctors", MVC.adpan.Doctors.Index())
此操作链接为我提供了以下 bad url 而不是 1st url (虽然页面加载正确!):
bad url) http://localhost/adpan/DoctorClinics/doctor1/Doctors
注意:我还尝试过没有T4MVC并在操作链接参数中指定空值,如下所示,但仍然获取坏网址:
@Html.ActionLink("Back to Doctors", "Index", "Doctors", null, null)
我只是在 adpan 区域工作,有2条路线。
我会很感激任何解决方案,如果可能的话,从坏网址获取正确视图的原因。
答案 0 :(得分:1)
路线值不仅来自@Html.RouteLink("foobar", new { controller = "Home", action = "Index", doctorObj = "" })
的参数,还来自https://mvnrepository.com/artifact/org.springframework/spring-orm/4.2.4.RELEASE。虽然许多人并不觉得这很直观,但却可以很容易地执行bleed over from the current request或网站区域等操作。
元数据的路径值不。它们是匹配URL模式时使用的值,或用于确定用于构建传出URL的路由。我怀疑这是你正在努力解决的问题,因为将路由值设置为URL非常罕见。
如果您需要传递元数据以及路径信息,那么有一个stay within the current culture属性可用于此目的。虽然两者都通过请求,但只使用路由值来确定路由是否匹配。
也可以通过明确指定当前请求来覆盖路由值。
{{1}}
但是,由于您需要在每个受影响的链接上执行此操作,因此首先将无效数据保留在路由值之外更为实际。
答案 1 :(得分:0)
基于@ NightOwl888 answer和difference between RouteLink and 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(新{Area =&#34;&#34;}) ?
由于讨论here,它似乎是T4MVC中的一个错误。以下路线链接将?Area = adpan 添加为网址的无效参数:
@Html.RouteLink("Back to Doctors", "adpan_default", MVC.adpan.Doctors.Index(), null)
结果网址:http://localhost/adpan/Doctors?Area=adpan
然而,这可能是欺骗T4MVC中不需要的url参数的技巧。