首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blazor客户端WASM表单验证在组件中不起作用

Blazor客户端WASM表单验证在组件中不起作用
EN

Stack Overflow用户
提问于 2020-06-11 18:33:17
回答 1查看 491关注 0票数 1

我在验证Blazor WASM客户端应用程序时遇到了问题。

将InputText元素封装到组件以进行紧凑布局时,将不再执行可正确执行的验证。

使用类似的模型

代码语言:javascript
复制
public class Customer {
    [Required]
    [StringLength(100)
    public string customerName {get; set;} = "";
}

以一种

代码语言:javascript
复制
<EditForm Model=@customer>

<DataAnnotationsValidator />
<ValidationSummary />

<div class="form-row">

    <div class="form-group mb-0 col-sm-12">

        <div class="input-group input-group-sm mb-1 mt-1">
            <div class="input-group-prepend">
                <span class="input-group-text" style="width:6em;">Firma</span>
            </div>
            <InputText type="text" class="form-control" @bind-Value=customer.customerName />
        </div>

    </div>
</EditForm>

验证工作正常!

但是为了模块化,我把内部的东西外包给了一个单独的组件

代码语言:javascript
复制
@page "/inputGroup"

    <div class="input-group input-group-sm mb-1 mt-1">
        <div class="input-group-prepend">
            <span class="input-group-text" style="width:6em;">@label</span>
        </div>
        <InputText type=@type class="form-control" @bind-Value=@data @oninput=@onChange />
    </div>

@code {

    [Parameter]
    public string label {get; set;} = "Label:";

    [Parameter]
    public string type {get; set;} = "text";

    [Parameter]
    public string data {get; set;} = "";

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

    private Task onChange(ChangeEventArgs e) {

        data = (string)e.Value;
        return dataChanged.InvokeAsync(data);
    }
}

然后我把这个放到我的表格上,就像

代码语言:javascript
复制
...
<div class="form-row">
    <div class="form-group mb-0 col-sm-12">
        <InputGroup label="Firma:" @bind-data=customer.customerName />
    </div>
</div>
...

验证不起作用!?

EN

回答 1

Stack Overflow用户

发布于 2021-02-23 08:50:09

您可以这样做,您可以子类化InputText

InputTextGroup.razor

代码语言:javascript
复制
@inherits Microsoft.AspNetCore.Components.Forms.InputText

<div class="mt-1">
       <input type="text" id="@Id"
           @attributes="@AdditionalAttributes" @bind="@CurrentValueAsString"
           class="@CssClass myOtherCssClasses" />
</div>

@if (ValidationFor != null)
{
    <div class="myValidationClass">
        <ValidationMessage For="ValidationFor" />
    </div>
}

InputTextGroup.razor.cs

代码语言:javascript
复制
public partial class InputTextGroup
{
    [Parameter] public string Id { get; set; } = HeadlessUI.HtmlElement.GenerateId();
    [Parameter] public string? Label { get; set; }
    [Parameter] public Expression<Func<string>>? ValidationFor { get; set; }
}

我从这个SO answer和这个Microsoft docs中获得了灵感

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62322383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档