所以我有点困惑,我认为某些提交逻辑在 Blazor Server 中是如何工作的(可能与 Blazor WebAssembly 相同)。
我有一个带有字段和提交按钮(提交类型)的 EditForm:
<EditForm EditContext="@_editContext" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<label for="firstName" class="form-label">First Name</label>
<InputText class="form-control" @bind-Value="_formModel.FirstName" />
<button type="submit" class="btn btn-primary">New Person</button>
</EditForm>
@code {
private void HandleValidSubmit()
{
System.Diagnostics.Debug.WriteLine("SUBMIT!");
}
private class FormModel
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Provide a first name")]
public string FirstName{ get; set; }
}
}
在浏览器中,我执行以下操作:
- 提供将根据我的评估为无效的输入,
FormModel
并且DataAnnotationsValidator
我被告知只需单击一个按钮。这是意料之中的。 - 我更正了名字文本输入的值,并且它仍然在浏览器中具有焦点,我单击
Submit
- 所发生的一切是 DataValidation 似乎已经运行(很酷,这总是好的),但是单击
Submit
按钮似乎并没有触发我运行 OnValidSubmit 的 C# 代码。(正如你在我的例子中看到的,我用Debug.WriteLine
有没有办法避免这种情况,同时使用 OnSubmit/OnInvalidSubmit/OnValidSubmit 和 type="submit" 的按钮保持 EditForm?
(我读到在 Blazor 和 State 更新中使用类型按钮与类型按钮时存在一些差异submit
......button
不知道这是否是一个因素)
从用户的角度来看,他们按两次按钮执行一个操作。这当然会让人觉得有点奇怪或混乱。
根据我的测试,这似乎是涉及 DataAnnotationsValidator 的情况,这部分是有道理的,直到需要在客户端上按下两个按钮才能实际点击我的 C# 代码。(即我知道焦点改变时正在发生数据验证)
我觉得我部分误解了某些东西,并且部分遗漏了我的表单中的一些额外代码或设置以避免这种情况。
有没有办法做我想做的事情,同时保持DataAnnotationsValidator
?
提前感谢您的帮助!