即使用户没有更改任何表单字段的值,我也想验证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"));发布于 2021-01-07 18:26:32
我发现可以通过在editContext.Validate()中运行OnAfterRender()来触发表单验证。
此代码在加载页面时立即验证表单:
@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);
}
}https://stackoverflow.com/questions/65616281
复制相似问题