如何在 Blazor 中使用路由发送日期时间
How to send datetime with route in Blazor
我正在尝试为我的一个发送日期时间的 Blazor 网页创建路由。根据其支持的文档,但我似乎无法使其正常工作。我是这样做的。
我想去的地方:
@page "/routeTest/{number:int}/{date:datetime}"
@code {
[Parameter] public int number { get; set; }
[Parameter] public DateTime date { get; set; }
}
我是如何尝试导航到那里的
NavigationManager.NavigateTo("routeTest/"+numberToSend+"/"+dateToSend);
它带我去
https://localhost:44383/routeTest/123/12/11/2019%204:36:26%20PM
虽然从技术上讲是正确的,但我很确定这是 dateTime 对象的错误。我应该如何才能正确发送 dateTime 对象?
如您所见,URL 中的日期时间因斜杠而影响路由。
以 ISO8601 格式发送 DateTime
yyyy-MM-ddTHH:mm:ss
。
您可以使用:
dateToSend.ToString("s", System.Globalization.CultureInfo.InvariantCulture)
其中格式说明符 s
称为 Sortable date/time pattern
或者
dateToSend.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture)
使用 InvariantCulture
因为 Blazor routing 页面声明:
Route constraints that verify the URL and are converted to a CLR type
(such as int
or DateTime
) always use the invariant culture. These
constraints assume that the URL is non-localizable.
问题是您的语言日期使用斜杠分隔符,这让 Blazor 认为您正在尝试访问不同的路径。
无论何时将日期作为 URL 参数发送,它们都需要采用不变的文化并使用破折号。
NavigationManager.NavigateTo("routeTest/"+numberToSend+"/"+dateToSend.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture));
作为参考,请参阅 official documentation
中的警告
这可以解决您的问题:
@code{
int numberToSend = 123;
string dateToSend = DateTime.Now.ToString("yyyy-MM-dd");
private void Naviagte()
{
NavigationManager.NavigateTo("routeTest/" + numberToSend + "/" + dateToSend);
}
}
我正在尝试为我的一个发送日期时间的 Blazor 网页创建路由。根据其支持的文档,但我似乎无法使其正常工作。我是这样做的。
我想去的地方:
@page "/routeTest/{number:int}/{date:datetime}"
@code {
[Parameter] public int number { get; set; }
[Parameter] public DateTime date { get; set; }
}
我是如何尝试导航到那里的
NavigationManager.NavigateTo("routeTest/"+numberToSend+"/"+dateToSend);
它带我去
https://localhost:44383/routeTest/123/12/11/2019%204:36:26%20PM
虽然从技术上讲是正确的,但我很确定这是 dateTime 对象的错误。我应该如何才能正确发送 dateTime 对象?
如您所见,URL 中的日期时间因斜杠而影响路由。
以 ISO8601 格式发送 DateTime
yyyy-MM-ddTHH:mm:ss
。
您可以使用:
dateToSend.ToString("s", System.Globalization.CultureInfo.InvariantCulture)
其中格式说明符 s
称为 Sortable date/time pattern
或者
dateToSend.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture)
使用 InvariantCulture
因为 Blazor routing 页面声明:
Route constraints that verify the URL and are converted to a CLR type (such as
int
orDateTime
) always use the invariant culture. These constraints assume that the URL is non-localizable.
问题是您的语言日期使用斜杠分隔符,这让 Blazor 认为您正在尝试访问不同的路径。
无论何时将日期作为 URL 参数发送,它们都需要采用不变的文化并使用破折号。
NavigationManager.NavigateTo("routeTest/"+numberToSend+"/"+dateToSend.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture));
作为参考,请参阅 official documentation
中的警告这可以解决您的问题:
@code{
int numberToSend = 123;
string dateToSend = DateTime.Now.ToString("yyyy-MM-dd");
private void Naviagte()
{
NavigationManager.NavigateTo("routeTest/" + numberToSend + "/" + dateToSend);
}
}