如何在Blazor中使用路线发送日期时间

时间:2019-12-12 00:38:29

标签: c# routing blazor blazor-server-side

我正在尝试为我的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对象?

3 个答案:

答案 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类型的路由约束   (例如intDateTime)始终使用不变区域性。

答案 2 :(得分:1)

这可以解决您的问题:

@code{
    int numberToSend = 123;
    string dateToSend = DateTime.Now.ToString("yyyy-MM-dd");

    private void Naviagte()
    {
        NavigationManager.NavigateTo("routeTest/" + numberToSend + "/" + dateToSend);
    }

}