validation - 在 blazor razor 页面中使用 editform 时如何重置自定义验证错误
问题描述
我有一个使用编辑上下文的编辑表单:
<EditForm OnValidSubmit="HandleValidSubmit" EditContext="_editContext" Context="auth">
<DataAnnotationsValidator />
<input type="time" @bind-value="_foodTruck.EndDelivery" @onkeydown="@(q=>ResetValidation("EndDelivery"))" >
<ValidationMessage For="() => _foodTruck.EndDelivery" />
<input type="time" @bind-value="_foodTruck.StartDelivery" @onkeydown="@(q=>ResetValidation("StartDelivery"))" >
<ValidationMessage For="() => _foodTruck.StartDelivery" />
<input class="btn btn-default" type="submit" value="save" />
</EditForm>
我在 HandleValidSubmit 中做了一些自定义验证:
EditContext _editContext = new EditContext(_foodTruck);
private async void HandleValidSubmit()
{
var messageStore = new ValidationMessageStore(_editContext);
if (_foodTruck.StartDelivery >= _foodTruck.EndDelivery)
{
messageStore.Add(_editContext.Field("EndDelivery"), "Bad time entered");
_editContext.NotifyValidationStateChanged();
}
if (!_editContext.Validate()) return;
}
现在发生的是我的自定义错误(“输入错误时间”)显示在正确的位置。唯一的问题是:当我更改值时,该错误不会消失。因此,如果我单击提交按钮,则永远不会再次调用 HandleValidSubmit。
我还尝试在修改字段时清空验证错误:
protected void ResetValidation(string field)
{
var messageStore = new ValidationMessageStore(_editContext);
messageStore.Clear(_editContext.Field(field));
messageStore.Clear();
_editContext.NotifyValidationStateChanged();
}
这是由 调用的onkeydown
。但这似乎也没有效果。Errormessage 不会消失,因此HandleValidSubmit
也不会被调用。
解决方案
我通过在验证重置上创建一个新的 EditContext 解决了这个问题。所以我只是在 ResetValidation-Method 中添加了以下行:
_editContext = new EditContext(_foodTruck);
但说实话:这感觉不对。因此,我将保持开放状态,以便获得更好的答案(希望如此)。
推荐阅读
- html - CSS 彩色背景混合在文本上
- c# - 当主体实体状态是其依赖实体的集合时的实体设计
- c# - 从 ASP.NET Core 中的单例服务访问 SignalR Hub Context.Items
- javascript - 无法使用 Fetch API 针对 Django REST Framework 执行 GET 请求 - HTTP 304 错误
- apple-developer - 设置“Apple Developer Portal”集成时出现 Codemagic“无效 API 密钥”问题
- jquery - Why is my jquery function call not working?
- python - Discord.py 反应角色
- c - 为什么不是我的 reverse(); 功能工作?
- ffmpeg - 为什么在解码 m3u8 时使用 ffmpeg 会出现此错误?
- jquery - 在更改切换 div 时,每列都有相同的名称 div 和选择选项