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

Blazor 如何将ValidationMessage传入继承InputText的扩展组件内部渲染

解决方案

你不需要额外手动传递验证表达式,因为InputText基类已经内置了ValueExpression参数,使用@bind-Value绑定的时候Blazor会自动为该参数赋值,刚好匹配ValidationMessage组件的For参数要求,直接在组件内部调用即可。


第一步:修改ExtendedInputText组件代码

@inherits InputText

<!-- 外层套div避免验证消息和输入框挤在同一行 -->
<div class="w-full">
    <div class="flex">
        <label class="w-1/2">
            @Label 
            @if(Required){
                <span class="text-red-500 ml-1">*</span>
            }
        </label>
        <InputText
            class="flex-1 border border-gray-200 bg-white p-2 rounded"
            placeholder="@Label"
            Value="@Value"
            ValueChanged="@ValueChanged"
            ValueExpression="@ValueExpression"
            Required="@Required"
        />
    </div>
    <!-- 直接使用基类自带的ValueExpression作为For参数即可 -->
    <ValidationMessage For="@ValueExpression" class="text-red-500 text-sm mt-1" />
</div>

@code
{
    [Parameter]
    public bool Required { get; set; }

    [Parameter]
    public string Label { get; set; }

    // 可选扩展:增加参数控制是否显示验证消息
    [Parameter]
    public bool ShowValidationMessage { get; set; } = true;
}

如果需要灵活控制是否显示验证消息,可以把<ValidationMessage>部分用条件判断包裹:

@if (ShowValidationMessage)
{
    <ValidationMessage For="@ValueExpression" class="text-red-500 text-sm mt-1" />
}

第二步:调用代码无需调整

你现有的组件调用逻辑完全不用修改,Blazor会在你使用@bind-Value语法时自动填充ValueExpression的取值:

<EditForm Model="Command" OnValidSubmit="OnValidSubmit">
  <FluentValidationValidator />
  <ValidationSummary />

  <ExtendedInputText Label="Title" Required="true" @bind-Value="Command.Title"/>

  <button type="submit" class="p-2 bg-positive-500 text-white rounded">Create</button>
</EditForm>

内容的提问来源于stack exchange,提问作者CT14.IT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:48:03