如何解决Blazor 验证未修改的表单
我想验证一个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"));
解决方法
我发现我可以通过在 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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。