【问题标题】:Blazor Razor Validation Message don't display from component libraryBlazor Razor 验证消息不从组件库中显示
【发布时间】:2021-08-07 15:20:16
【问题描述】:

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

组件库的代码:

自定义输入文本

<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 包中导入组件以便能够在应用程序中使用它

应用代码:

&lt;CustomInputText placeholderText="Place Holder Test" model="filterPayroll.IPF" @bind-Value="filterPayroll.IPF"/&gt;

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

【问题讨论】:

    标签: razor blazor


    【解决方案1】:

    您需要将 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" />
    

    【讨论】:

    • 你知道如何将消息错误的类(.validation-message)添加到输入文本的文本中,因此两者都显示为红色吗?
    • 不直接,我总是使用 Blazor 输入控件,或者我继承的处理 CSS 更改的版本。如果字段(由FieldIdentifier 标识)验证失败,则可以通过在字符串中使用validinvalid 在EditContext 上调用FieldCssClass() 来获取CSS 字符串。你创建一个FieldIdentifier 这样FieldIdentifier fi = new FieldIdentifier(model: model, fieldName: "fieldName");
    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多