gpt4 book ai didi

asp.net - Blazor 验证未修改的表单

转载 作者:行者123 更新时间:2023-12-05 06:54:05 24 4
gpt4 key购买 nike

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

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

这是我的代码:

@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"));

最佳答案

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

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

@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);
}
}

关于asp.net - Blazor 验证未修改的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65616281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com