c# - 重定向到没有当前路由值的剃须刀页面
问题描述
我有一个页面,它需要一些这样的路由值:
@page "{reportYear:int:range(2000, 2100)?}/{reportMonth:int:range(1, 12)?}"
模型如下所示:
public async Task<IActionResult> OnGetAsync([FromRoute]int? reportYear, [FromRoute]int? reportMonth)
{
if (reportYear.HasValue == reportMonth.HasValue)
{
MyViewModel.ReportYear = reportYear ?? DefaultReportYear;
MyViewModel.ReportMonth = reportMonth ?? DefaultReportMonth;
return Page();
}
return RedirectToPage(PageName);
}
这个想法是,如果两个路由值都指定并且正确,则显示带有它们的页面。如果两者都没有指定,仍然显示一个页面,但使用默认值。
如果只指定其中一个,则重定向到同一页面,但没有任何路由值,以显示默认版本并使用明确的地址。
问题是“RedirectToPage”重定向并保留了路由值。换句话说,如果我访问“/pageName/2018”,我会重定向到相同的“/pageName/2018” 提供的路由值(2018)不会从重定向中剥离。
如何清除值并仅重定向到页面?
PS Url.Page(PageName) 在这种情况下也返回“/pageName/2018”。路由值不会被删除。
PPS 我只是想让用户体验更好一点。如果用户输入了错误的页面地址(即“/pageName/2018”),我想从地址中删除不正确的部分(2018)并显示默认页面,例如简单的“/pageName”。
PPPS 我知道我可以摆弄与地址栏一起使用的 JS 东西,但不喜欢这种方法。
解决方案
当重定向到同一页面或操作时,链接生成会在生成目标 URL 时考虑环境值,即当前路由的路由值。我已经问过这个问题,显然这主要是为了允许使用Url.Action()
或Url.Page()
链接回完全相同的页面,类似于相对 URL 在 HTML 中的工作方式。
但是,您始终可以通过在RedirectToPage
调用中明确指定路由值来覆盖环境值:
return RedirectToPage("Test", new
{
reportYear = (int?)null,
reportMonth = (int?)null,
});
这将显式地将路由值设置为null
并覆盖仍然作为环境值存在的任何值。
推荐阅读
- c# - 如何在 WPF 桌面应用程序的 System.Windows.Controls.WebBrowser 中显示 pdf 文件(二进制 [])?
- python - 通过 int 值将嵌套列表拆分为子列表
- android - 为什么我的扩展图块扩展到整个屏幕
- android - 如何根据图层列表在启动画面中添加应用程序名称?
- r - R - 按组计算所有数据切割的差异
- amazon-web-services - 如何在没有托管 UI 的情况下使用 aws-amplify API 使用联合身份验证?
- ios - 如何在 firestore 数据库中使用 swift 更新数组中的对象(地图)?
- javascript - 是否可以将元素包裹在头部
- api - 如何在您的烧瓶网站中显示 Stackoverflow 问题
- javascript - 如何按国际象棋顺序将两个数组合并为一个