📜  blazor 新版本更改 (1)

📅  最后修改于: 2023-12-03 15:13:40.025000             🧑  作者: Mango

Blazor 新版本更改

Blazor 是一个使用 C# 和 HTML 构建 Web 应用程序的开源框架。它可以直接在浏览器中运行而不需要插件。Blazor 有两种运行方式,一种是基于 WebAssembly 技术的 Blazor WebAssembly,另一种是基于 SignalR 技术的 Blazor Server。

近期,Blazor 推出了新版本(Blazor 3.2),带来了一些重大的改变。

前端验证

在之前的版本中,Blazor 的前端验证是通过 JavaScript 实现的。这种方式的问题是,即使没有启用 JavaScript,这些验证也不起作用。现在,Blazor 3.2 提供了一种基于数据注释的前端验证方式。你可以在 C# 中添加数据注释,然后在 HTML 中使用 EditFormDataAnnotationsValidator 组件显示验证结果。示例代码:

<EditForm Model="@account" OnValidSubmit="@HandleValidSubmit">
    <DataAnnotationsValidator />
    <div class="form-group">
        <label for="user-name">User Name</label>
        <InputText id="user-name" class="form-control" @bind-Value="@account.UserName" />
        <ValidationMessage For="@(() => account.UserName)" />
    </div>
    <div class="form-group">
        <label for="password">Password</label>
        <InputText id="password" class="form-control" type="password" @bind-Value="@account.Password" />
        <ValidationMessage For="@(() => account.Password)" />
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</EditForm>
路由指定参数显式转换

在 Blazor 3.2 中,你可以使用 IConvertable 接口手动指定参数类型的显式转换,根据自己的需求进行处理。这种方式的好处是,如果转换失败,你可以更准确地控制错误信息。示例代码:

public static T ConvertTo<T>(this object value)
{
    var result = default(T);

    try
    {
        result = (T)Convert.ChangeType(value, typeof(T));
    }
    catch (Exception ex)
    {
        throw new InvalidOperationException($"Cannot convert '{value}' to {typeof(T)}", ex);
    }

    return result;
}
RenderFragment 参数

RenderFragment 是 Blazor 中的一个非常有用的组件。以前,RenderFragment 只有一个无参的方法,现在,Blazor 3.2 引入了带参数的 RenderFragment 方法。这使得编写更灵活的组件变得更加容易。

public class HelloComponent : ComponentBase
{
    [Parameter]
    public RenderFragment<string> ChildContent { get; set; }

    protected override void BuildRenderTree(RenderTreeBuilder builder)
    {
        builder.OpenComponent(0, typeof(ChildComponent));
        builder.AddAttribute(1, "name", "World");
        builder.AddAttribute(2, "ChildContent", ChildContent("Hello"));
        builder.CloseComponent();
    }
}
总结

Blazor 3.2 带来了很多令人兴奋的新功能。这个框架通过将 C# 和 HTML 放在一起,使 web 开发更加轻松和直观。随着新功能的增加,Blazor 的未来将变得更加令人期待。