📅  最后修改于: 2023-12-03 15:13:40.025000             🧑  作者: Mango
Blazor 是一个使用 C# 和 HTML 构建 Web 应用程序的开源框架。它可以直接在浏览器中运行而不需要插件。Blazor 有两种运行方式,一种是基于 WebAssembly 技术的 Blazor WebAssembly,另一种是基于 SignalR 技术的 Blazor Server。
近期,Blazor 推出了新版本(Blazor 3.2),带来了一些重大的改变。
在之前的版本中,Blazor 的前端验证是通过 JavaScript 实现的。这种方式的问题是,即使没有启用 JavaScript,这些验证也不起作用。现在,Blazor 3.2 提供了一种基于数据注释的前端验证方式。你可以在 C# 中添加数据注释,然后在 HTML 中使用 EditForm
和 DataAnnotationsValidator
组件显示验证结果。示例代码:
<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 是 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 的未来将变得更加令人期待。