【问题标题】:How to send datetime with route in Blazor如何在 Blazor 中使用路由发送日期时间
【发布时间】:2019-12-12 00:38:29
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这可以解决您的问题:

    @code{
        int numberToSend = 123;
        string dateToSend = DateTime.Now.ToString("yyyy-MM-dd");
    
        private void Naviagte()
        {
            NavigationManager.NavigateTo("routeTest/" + numberToSend + "/" + dateToSend);
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      如您所见,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)始终使用不变的文化。这些 约束假设 URL 是不可本地化的。

      【讨论】:

        【解决方案3】:

        问题是您的语言日期使用斜杠分隔符,这使 Blazor 认为您正在尝试访问不同的路线。

        每当将日期作为 URL 参数发送时,它们都需要采用不变的文化并使用破折号。

        NavigationManager.NavigateTo("routeTest/"+numberToSend+"/"+dateToSend.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture));
        

        参考见official documentation中的警告

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多