You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor表单验证:输入托盘数量需必填重量及绑定值不更新问题

Blazor表单验证与绑定问题解决

问题场景

我有一段Blazor表单代码:

<BSLabel IsColumn="true">Pallets</BSLabel>
<BSCol ColumnSmall="4">
    <BSInput InputType="InputType.Number" @bind-Value="Booking.PalletsQty"></BSInput>
</BSCol>
<div class="col">
    <BSLabel Class="row">Weight In Kilograms</BSLabel>
    <BSLabel Class="row">(Gross weight of PO)</BSLabel>
</div>
<BSCol ColumnSmall="4">
    <BSInput InputType="InputType.Text" @bind-Value="Booking.Weight"></BSInput>
    <ValidationMessage For="() => Booking.Weight"></ValidationMessage>
</BSCol>

需求是:当用户输入托盘数量(PalletsQty)时,重量字段(Weight)必须填写,要立即触发重量字段的必填验证提示。

按照建议修改第一个输入控件后:

<BSInput InputType="InputType.Number" @bind-Value="Booking.PalletsQty" @onchange="(() => SetBooking())"></BSInput>

现在每次修改值时SetBooking()方法都会被调用,但模型中的Booking.PalletsQty值并未更新,同时也没实现触发重量字段验证的需求。

解决方案

1. 修复绑定值不更新的问题

@bind-Value本质是封装了Value属性和ValueChanged事件,手动添加@onchange会覆盖默认的绑定逻辑,导致值无法同步到模型。要保留绑定同时触发自定义逻辑,应该用@bind-Value:after替代@onchange:

<BSInput InputType="InputType.Number" @bind-Value="Booking.PalletsQty" @bind-Value:after="SetBooking"></BSInput>

这样既保证Booking.PalletsQty能正常更新,又会在值变更后执行SetBooking方法。

2. 触发重量字段的必填验证

首先确保你的模型类中Weight字段已经标记了[Required]特性:

public class BookingModel
{
    public int PalletsQty { get; set; }

    [Required(ErrorMessage = "重量字段不能为空")]
    public string Weight { get; set; }
}

然后在组件中注入EditContext,并在SetBooking方法中手动触发Weight字段的验证:

@inject EditContext EditContext

// 组件内的方法
private void SetBooking()
{
    // 生成Weight字段的标识,通知验证系统字段已变更
    var weightField = FieldIdentifier.Create(() => Booking.Weight);
    EditContext.NotifyFieldChanged(weightField);
    // 若需要触发整个表单的验证,可替换为下面的代码
    // EditContext.Validate();
}

这样当用户修改PalletsQty时,会立即触发Weight字段的必填验证提示。

3. 优化:实时触发验证(可选)

如果希望用户输入托盘数量的过程中(而非仅失去焦点时)就触发验证,可以将绑定事件改为oninput:

<BSInput InputType="InputType.Number" 
         @bind-Value="Booking.PalletsQty" 
         @bind-Value:event="oninput"
         @bind-Value:after="SetBooking"></BSInput>

这样每输入一个字符就会同步值并触发验证,交互更及时。

内容的提问来源于stack exchange,提问作者bilpor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:58:19