我正在尝试为我的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对象?
答案 0 :(得分:2)
问题在于,您所用语言的日期中使用了斜杠分隔符,这使Blazor认为您正在尝试访问其他路线。
每当将日期作为URL参数发送时,它们都必须保持不变,并使用破折号。
NavigationManager.NavigateTo("routeTest/"+numberToSend+"/"+dateToSend.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture));
作为参考,请参阅official documentation
中的警告答案 1 :(得分:1)
您已经确定,由于斜杠,URL中的DateTime正在影响路由。
以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页面指出:
用于验证URL并转换为CLR类型的路由约束 (例如
int
或DateTime
)始终使用不变区域性。
答案 2 :(得分:1)
这可以解决您的问题:
@code{
int numberToSend = 123;
string dateToSend = DateTime.Now.ToString("yyyy-MM-dd");
private void Naviagte()
{
NavigationManager.NavigateTo("routeTest/" + numberToSend + "/" + dateToSend);
}
}