Razor Pages自定义路由routeUrl获取及RouteData相关问题咨询
Razor Pages自定义路由传递与RouteData相关问题解答
问题1:如何无需硬编码,在表单中传递自定义页面URL?
你当前用ViewContext.RouteData.Values["Page"]获取到的是页面的默认文件路径路由(比如/Landing),而非@page指令设置的自定义路由。可以通过以下两种可靠方式获取并传递自定义路由URL:
方式1:使用Url.Page()生成对应页面的自定义路由
Url.Page()方法会自动识别页面@page指令配置的自定义路由,生成正确的URL。如果是当前页面(Landing.cshtml),可以直接传入页面名称:
<input type="hidden" id="returnUrl" name="returnUrl" value='@Url.Page("Landing")'>
如果需要在其他页面的表单中传递Landing的自定义路由,同样使用这个方法即可,无需硬编码路径。
方式2:直接获取当前请求的路径(仅适用于当前页面的表单)
如果表单就在自定义路由对应的页面上,当前请求的路径就是自定义路由本身,可以直接用Context.Request.Path获取:
<input type="hidden" id="returnUrl" name="returnUrl" value='@Context.Request.Path'>
这个方式更通用,无需指定页面名称,适合当前页面内的跳转场景。
问题2:ViewContext.RouteData.Values与RouteData.Values有何区别?
二者本质上指向同一个RouteData实例,所以包含的键值对完全一致,区别仅在于访问场景:
RouteData是Razor Pages页面模型(PageModel)的属性,主要在页面模型的后台代码(比如OnGet/OnPost方法)中直接调用;ViewContext.RouteData是视图上下文(ViewContext)的属性,主要在.cshtml视图文件中使用——因为视图无法直接访问页面模型的RouteData(除非显式引用Model.RouteData),而ViewContext是视图的内置对象,更方便在视图中获取路由数据。
简单来说,它们是同一数据的不同访问入口,适配不同的代码场景。
内容的提问来源于stack exchange,提问作者Duke3e33
相关产品推荐
相关产品推荐

