【发布时间】:2020-07-26 05:49:12
【问题描述】:
我有一个表示表单的 Blazor 组件,它需要在提交之前执行一些昂贵的验证,以确保服务器上数据点的唯一性。我试图以此文档为灵感:https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-3.1
Microsoft 文档路线图中似乎有更好的文档:https://github.com/dotnet/AspNetCore.Docs/issues/17377
我的组件如下所示:
<EditForm Model="@form" OnValidSubmit="@Submit">
<InputText @bind-Value="form.DataPoint" />
<ValidationMessage For="() => form.DataPoint" />
<button type="submit">Go!</button>
</EditForm>
@code {
private Form form = new Form();
private EditContext editContext;
protected override void OnInitialized()
{
editContext = new EditContext(form);
}
private async Task Submit()
{
var isValid = editContext.Validate() && await ServerValidate(editContext);
if (isValid)
{
// do stuff
}
}
private async Task<bool> ServerValidate(EditContext editContext)
{
var form = (Form)editContext.Model;
var validationErrors = new ValidationMessageStore(editContext);
var isDataPointCollision = await SomeService.CheckUniqueness(form.DataPoint);
if (isDataPointCollision)
{
var field = new FieldIdentifier(form, nameof(Form.DataPoint));
validationErrors.Add(field, "This data point already exists, please type a different one");
editContext.NotifyValidationStateChanged();
return false;
}
return true;
}
}
我的验证代码正常工作,检测到冲突,并阻止提交表单。但是,<ValidationMessage [...] /> 组件的 UI 不会按预期更新。根本不会发生 UI 更新,也不会显示验证消息。我也试过这个组件:
<ValidationSummary Model="@form" />
无济于事。
无论是在服务器端,还是在客户端 JS 中都没有错误。
我是不是用这种方法找错了树,还是我错过了某个地方的连接?有没有更好的方法来完成我想做的事情?
【问题讨论】:
标签: blazor