AspNetMvc在两条不同路线之间导航时附加网址

时间:2017-10-20 15:33:49

标签: asp.net-mvc url routes asp.net-mvc-areas t4mvc

我的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条路线。

我会很感激任何解决方案,如果可能的话,从坏网址获取正确视图的原因。

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 answerdifference 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参数的技巧。