У меня есть форма редактирования с использованием editcontext:
<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
. Но это, похоже, тоже не дает эффекта. Сообщение об ошибке не исчезает, поэтому HandleValidSubmit
также не вызывается.