Blazor-EditContext

EditContext 是 Blazor 中用于管理表单状态和验证的核心类。EditContext 称为编辑上下文对象,在编辑表单中,可以绑定模型对象。它跟踪表单字段的修改状态、验证状态,并提供事件通知机制(如 OnFieldChanged 和 OnValidationStateChanged)。

绑定方式

如何使用EditContext 绑定模型对象

示例

@page "/EditContextDemo"
<h3>EditContextDemo</h3>
<EditForm EditContext="editContext" OnSubmit="Submit">
    <div class="mb-3">
        <label class="form-label">Name</label>
        <InputText class="form-control" @bind-value="Model!.Name"/>
    </div>
    <div class="mb-3">
        <button class="btn btn-primary" type="submit">提交</button>
    </div>
</EditForm>
@code {
    public User? Model { get; set; }
    private EditContext? editContext;

    protected override void OnInitialized()
    {
        Model = new User();
        editContext = new EditContext(Model);
    }
    
    void Submit()
    {
        Console.WriteLine(Model?.Name);
    }
}

在OnInitialized生命周期方法中初始化,User类实例Model。

editContext实例通过Model对象创建,跟踪表单的编辑状态和验证。

通过以上的方式我们就可以通过EditContext与属性进行绑定

运行结果:

在这里插入图片描述

获取字段定义

使用editContext.Field("xxx")方法可以获得绑定模型的字段定义

示例

@page "/EditContextDemo"
<h3>EditContextDemo</h3>
<EditForm EditContext="editContext" OnSubmit="Submit">
    <div class="mb-3">
        <label class="form-label">Name</label>
        <InputText class="form-control" @bind-value="Model!.Name"/>
    </div>
    <div class="mb-3">
        <button class="btn btn-primary" type="submit">提交</button>
    </div>
</EditForm>
@code {
    public User? Model { get; set; }
    private EditContext? editContext;

    protected override void OnInitialized()
    {
        Model = new User();
        editContext = new EditContext(Model);
    }
    
    void Submit()
    {
        var field = editContext.Field("Name");
        Console.WriteLine(Model?.Name);
        Console.WriteLine($"字段名:{field.FieldName},字段所在的模型:{field.Model}");
    }
}

我们使用 editContext.Field("Name");方法就可以获得所绑定模型的字段定义

运行结果

在这里插入图片描述

OnFieldChanged事件使用

在 EditContext 对象中有一个 OnFieldChanged 事件,当表单中的任何绑定的字段值发生变化,就会触发该事件。
在 FieldChaged 事件处理程序中,需要带有(object? sender,Field Changed EventArgse)这 2 个参数,使用 e.F ieldIdentifier 可以得到当前值发生改变的字段定义。

示例

@page "/EditContextDemo"
@implements IDisposable
<h3>EditContextDemo</h3>
<EditForm EditContext="editContext" OnSubmit="Submit">
    <div class="mb-3">
        <label class="form-label">Name</label>
        <InputText class="form-control" @bind-value="Model!.Name"/>
    </div>
    <div class="mb-3">
        <button class="btn btn-primary" type="submit">提交</button>
    </div>
</EditForm>
@code {
    public User? Model { get; set; }
    private EditContext? editContext;

    protected override void OnInitialized()
    {
        Model = new User();
        editContext = new EditContext(Model);
        editContext.OnFieldChanged += EditContextOnOnFieldChanged;
    }

    private void EditContextOnOnFieldChanged(object? sender, FieldChangedEventArgs e)
    {
        Console.WriteLine($"值发生变化的字段:{e.FieldIdentifier.FieldName}");
    }

    void Submit()
    {
        var field = editContext!.Field("Name");
        Console.WriteLine(Model?.Name);
        Console.WriteLine($"字段名:{field.FieldName},字段所在的模型:{field.Model}");
    }

    public void Dispose()
    {
        // TODO 在此释放托管资源
        editContext!.OnFieldChanged -= EditContextOnOnFieldChanged;
    }

}

当姓名输入框失去焦点时会触发EditContextOnOnFieldChanged

运行结果

在这里插入图片描述

参数使用

对于< EditForm>组件,在 OnSubmit、OnInvalidSubmit、OnValidSubmit 这 3 个事件挂载的事件处理程序中,都可以使用EditContext 类型的参数。


    void Submit(EditContext editContext)
    {
        Console.WriteLine(editContext.Field("FullName").FieldName);
    }

在事件方法中直接添加EditContext

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code-Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值