首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blazor验证未经修改的表单

Blazor验证未经修改的表单
EN

Stack Overflow用户
提问于 2021-01-07 16:29:46
回答 1查看 393关注 0票数 3

即使用户没有更改任何表单字段的值,我也想验证Blazor表单。(默认情况下,Blazor只在修改字段后验证字段。)

如何在不需要用户交互(编辑字段、单击按钮等)的情况下验证表单?我想在表单最初显示时验证它。

这是我的代码:

代码语言:javascript
复制
@using System.ComponentModel.DataAnnotations
@page "/"

<EditForm Model="@formModel" Context="currentEditContext">
    <DataAnnotationsValidator />

    <p>
        <label>My Text: <InputText @bind-Value="formModel.Text" /></label>
        <ValidationMessage For="@(() => formModel.Text)" />
    </p>

    <p>Form valid: @currentEditContext.Validate()</p>
</EditForm>

@code
{
    FormModel formModel = new();

    private class FormModel
    {
        [Required]
        public string Text { get; set; } = "";
    }
}

我尝试在我的EditContext对象上使用各种方法,但它们都没有触发验证。

  • editContext.Validate();
  • editContext.NotifyValidationStateChanged();
  • editContext.NotifyFieldChanged(editContext.Field("Text"));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-07 18:26:32

我发现可以通过在editContext.Validate()中运行OnAfterRender()来触发表单验证。

此代码在加载页面时立即验证表单:

代码语言:javascript
复制
@using System.ComponentModel.DataAnnotations
@page "/"

<EditForm EditContext="editContext">
    <DataAnnotationsValidator />

    <p>
        <label>My Text: <InputText @bind-Value="formModel.Text" /></label>
        <ValidationMessage For="@(() => formModel.Text)" />
    </p>

    <p>Form valid: @(!editContext.GetValidationMessages().Any())</p>
</EditForm>

@code
{
    FormModel formModel = new();
    EditContext editContext;

    private class FormModel
    {
        [Required]
        public string Text { get; set; } = "";
    }

    protected override void OnInitialized()
    {
        editContext = new(formModel);
        base.OnInitialized();
    }

    protected override void OnAfterRender(bool firstRender)
    {
        if (firstRender)
        {
            editContext.Validate();
            StateHasChanged(); // Update the "Form valid" message
        }

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

https://stackoverflow.com/questions/65616281

复制
相关文章

相似问题

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