组件库中不显示 Blazor Razor 验证消息

Blazor Razor Validation Message don't display from component library

我已经创建了一个 blazor 组件库,以便能够从应用程序调用组件,但未显示消息验证。目前,验证是在 InputText 中完成的(它验证输入的格式或长度),但未显示组件的消息或样式。

组件库代码:

CustomInputText

<input value="@Value" @oninput="OnValueChanged" placeholder=@placeholderText class="form-control i-component o-my-4" />
<ValidationMessage For="@(() => model)" />

@code {
    [Parameter]
    public string placeholderText { get; set; }

    [Parameter]
    public object model { get; set; }

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

    [Parameter]
    public EventCallback<string> ValueChanged { get; set; }

    private Task OnValueChanged(ChangeEventArgs e)
    {
        Value = e.Value.ToString();

        return ValueChanged.InvokeAsync(Value);
    }
}

我从 nuget 包中导入组件以便能够在 App 中使用它

应用代码:

<CustomInputText placeholderText="Place Holder Test" model="filterPayroll.IPF" @bind-Value="filterPayroll.IPF"/>

当我将 ValidationMessage 直接放在应用程序中时,它可以正常工作,但不能放在库中。对于这两种情况,链接到“filterPayroll”class 的验证是正确完成的,区别在于在一种情况下显示消息而另一种不显示。

您需要将 For 作为表达式传递给验证摘要。

CustomInputText 需要看起来像这样:

<input value="@Value" @oninput="OnValueChanged" placeholder=@placeholderText class="form-control i-component o-my-4" />
<ValidationMessage For="@For" />

@code {
    [Parameter]
    public string placeholderText { get; set; }

    [Parameter] public Expression<Func<string>>? For { get; set; }

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

    [Parameter]
    public EventCallback<string> ValueChanged { get; set; }

    private Task OnValueChanged(ChangeEventArgs e)
    {
        Value = e.Value.ToString();

        return ValueChanged.InvokeAsync(Value);
    }
}

你的标记:

<CustomInputText @bind-Value="filterPayRoll.IDF" For="() => filterPayRoll.IDF" />