我正在创建具有自定义Route参数的ASP.net core 2.2 MVC应用,因此在我的startup.cs中已经创建
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{location=london}/{controller=Home}/{action=Index}/{id?}");
});
这正常工作,我可以通过ViewContext或HttpContext.GetRouteData()方法访问控制器中的位置。
但是,当我在自己的视图中使用Url.Action生成Url时,我唯一能获得生成Url的方法就是使用
@Url.Action("ProjectSearch","Projects", new {
location=ViewContext.RouteData.Values["location"] })
根据我的阅读,尽管它应该使用传递到当前上下文中的位置(我正在浏览到http://mysite/reading/projects),所以我应该可以使用
@Url.Action("ProjectSearch","Projects")
但是它只返回null。
我真的需要添加 我所有的Url.Action调用都“新建{location = ViewContext.RouteData.Values [“ location”]}“”
编辑
我在测试应用程序中尝试过并获得了相同的功能。从ASP.net Core 2.2 MVC WebApp开始。将startup.cs更改为
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{location=foo}/{controller=Home}/{action=Index}/{id?}");
});
并将以下内容添加到index.cshtml
RouteParam: @ViewContext.RouteData.Values["location"]<br />
1st Url:@Url.Action("Privacy")<br />
2nd Url:@Url.Action("Privacy","Home",new { location = ViewContext.RouteData.Values["location"] })<br />
,当您导航到“ https://localhost:44391/bar/home/index”时 您将获得以下输出:
RouteParam:栏
第一个网址:/ foo / Home / Privacy
第二个网址:/ bar / Home / Privacy