我正在将RazorPages应用程序转换为渲染的Blazor服务器,该应用程序实际上只是一个UI,所有数据访问/操作都是通过API完成的。在CRUD操作中,API将以标准化格式返回错误对象的集合。
我在RazorPages应用程序中具有代码,可以将错误的集合转换为ModelStateDictionary中的项,并且可以按预期工作。显示消息,我可以进行更改并重新提交表单。
我已经在Blazor应用程序中添加了类似的代码以添加到EditContext中,但是我正在努力弄清楚如何清除由扩展方法添加的验证消息。我一直在看这个问题,并提出了所有解决方案,但似乎没有一个对我有用:How to reset custom validation errors when using editform in blazor razor page
这是实际执行EditContext的方法:
private static void AddErrors(EditContext editContext, Dictionary<string, List<string>> errorDictionary)
{
if (errorDictionary != null && errorDictionary.Any())
{
var validationMessageStore = new ValidationMessageStore(editContext);
foreach (var error in errorDictionary)
{
validationMessageStore.Add(editContext.Field(error.Key), error.Value);
}
editContext.NotifyValidationStateChanged();
}
}
这是表单定义:
<EditForm class="form-signin" OnValidSubmit="OnSubmit" Model="loginModel" Context="CurrentEditContext">
<DataAnnotationsValidator />
<SummaryOnlyValidationSummary />
<div class="form-group">
<InputText id="inputUsername" class="form-control" @bind-Value="loginModel.Username" autofocus placeholder="Username" @onkeyup="@(q => ResetValidation(CurrentEditContext))" />
<ValidationMessage For="@(() => loginModel.Username)" />
</div>
<div class="form-group">
<InputText type="password" id="inputPassword" class="form-control" placeholder="Password" @bind-Value="loginModel.Password" />
<ValidationMessage For="@(() => loginModel.Password)" />
</div>
<div class="form-group">
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</div>
</EditForm>
这是提交表单时的方法签名,根据包含的验证消息,传递的editContext看起来正确(来自模型属性的Required属性的消息正确):
protected async Task OnSubmit(EditContext editContext)
SummaryOnlyValidationSummary是一个自定义组件,其工作原理与开箱即用的ValidationSummary相似,但它排除了DataAnnotationsValidator已经显示的任何消息。>
我是否以错误的方式添加消息?如果是这样,是否有关于我哪里出问题的良好指导?如果不是,是否有人知道如何正确清除或重置验证消息?我试图总是提交表单,不仅在表单有效时,甚至强迫editContext.Validate()都不会清除代码中添加的验证消息。如果有帮助,请在ResetValidation中,在当前editContext之外创建一个新的ValidationMessageStore实例,并且该实例不包含任何消息(不确定所期望的行为是什么)。
我正在将RazorPages应用程序转换为渲染的Blazor服务器,该应用程序实际上只是一个UI,所有数据访问/操作都是通过API完成的。在CRUD操作中,API将......>
以下是我在github 中发布的问题:
我知道如何通过EditContext检索验证消息,但是如何获取ValidationMessageStore,读取其包含的消息并对其进行一些更改。
我只是无法获得要在更新模型时清除的内容