重定向到没有当前路由值的剃刀页面
Redirect to a razor page without current route values
我有一个页面,它需要一些像这样的路由值:
@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) 未从重定向中删除。
如何清除值并仅重定向到一个页面?
P.S。
在这种情况下,Url.Page(PageName) 也会返回“/pageName/2018”。路由值未被删除。
P.P.S。
我只是想让用户体验好一点。
如果用户输入了错误的页面地址(即“/pageName/2018”),我想从地址中删除不正确的部分(2018)并显示默认页面,例如简单的“/pageName”。
P.P.P.S。
我知道我可以 fiddle 处理与地址栏一起使用的 JS 内容,但我不喜欢这种方法。
重定向到同一页面或操作时,link 生成在生成目标 URL 时会考虑环境值,即当前路由的路由值。我已经 asked about this,显然这样做主要是为了允许使用 Url.Action()
或 Url.Page()
到 link 回到完全相同的页面,类似于相对 URLs 在 HTML.
工作
但是,您始终可以通过在 RedirectToPage
调用中明确指定路由值来覆盖环境值:
return RedirectToPage("Test", new
{
reportYear = (int?)null,
reportMonth = (int?)null,
});
这会将路由值显式设置为 null
并覆盖仍然作为环境值存在的任何值。
我有一个页面,它需要一些像这样的路由值:
@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) 未从重定向中删除。
如何清除值并仅重定向到一个页面?
P.S。 在这种情况下,Url.Page(PageName) 也会返回“/pageName/2018”。路由值未被删除。
P.P.S。 我只是想让用户体验好一点。 如果用户输入了错误的页面地址(即“/pageName/2018”),我想从地址中删除不正确的部分(2018)并显示默认页面,例如简单的“/pageName”。
P.P.P.S。 我知道我可以 fiddle 处理与地址栏一起使用的 JS 内容,但我不喜欢这种方法。
重定向到同一页面或操作时,link 生成在生成目标 URL 时会考虑环境值,即当前路由的路由值。我已经 asked about this,显然这样做主要是为了允许使用 Url.Action()
或 Url.Page()
到 link 回到完全相同的页面,类似于相对 URLs 在 HTML.
但是,您始终可以通过在 RedirectToPage
调用中明确指定路由值来覆盖环境值:
return RedirectToPage("Test", new
{
reportYear = (int?)null,
reportMonth = (int?)null,
});
这会将路由值显式设置为 null
并覆盖仍然作为环境值存在的任何值。