我正在使用Blazorise Bootstrap创建一个Blazor客户端应用程序。
在我的代码中,我在 POCO 上有一个基本 CRUD 的弹出窗口。我正在使用 Blazorise 验证来强制执行现场要求;
Blazorise验证文档
现在我遇到的问题是我的弹出窗口可以重复使用以添加和编辑 POCO(从数据网格)。我将验证绑定到引用,如下所示;
<Validations @ref="companyValidations" Mode="ValidationMode.Auto">
<Fields>
<Field IsHorizontal="true" ColumnSize="ColumnSize.Is5.OnDesktop">
<Validation Validator="@ValidationRule.IsNotEmpty">
<FieldLabel ColumnSize="ColumnSize.Is3.OnDesktop">Company</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is9.OnDesktop">
<TextEdit @bind-Text="@Company.Name" Placeholder="Enter the Company Name..">
<Feedback>
<ValidationError>Please enter a Name for the Company!</ValidationError>
</Feedback>
</TextEdit>
</FieldBody>
</Validation>
</Field>
<Field IsHorizontal="true" ColumnSize="ColumnSize.Is5.OnDesktop">
<Validation Validator="@ValidationRule.IsNotEmpty">
<FieldLabel ColumnSize="ColumnSize.Is3.OnDesktop">Website</FieldLabel>
<FieldBody ColumnSize="ColumnSize.Is9.OnDesktop">
<TextEdit @bind-Text="@Company.Website" Placeholder="Enter the Web Address..">
<Feedback>
<ValidationError>Please enter a Website Address for the Company!</ValidationError>
</Feedback>
</TextEdit>
</FieldBody>
</Validation>
</Field>
</Fields>
</Validations>
跟
Validations companyValidations = new Validations();
在我的Code
部分。这在第一次工作正常,但是,如果我随后重用组件并重置Company
实例,则会显示以前的验证?例如,我会加载弹出窗口并输入有效的Company.Name
和Company.Email
.然后我会重新加载弹出窗口并使用清除文本框的Company = new Company();
重置,但由于某种原因,调用companyValidations.ValidateAll()
仍然返回 true?
为了完成,我通过组件上的公共方法来执行此操作;
public void Reset()
{
Company = new CompanyInputModel();
companyValidations.ValidateAll();
companyValidations.ClearAll();
StateHasChanged();
}
我已经玩过顺序,但是,当我重置绑定模型时,我似乎无法将验证重置为"刷新"??
我尝试将ValidationMode
设置为Validation.Auto
和Validation.Manual
,但问题仍然存在?
我相信Blazorise 验证组件将您的验证数据保存到您的companyValidations
因此,请重新初始化您的companyValidation
并再次检查。
public void Reset()
{
Company = new CompanyInputModel();
Validations companyValidations = new Validations(); // reinitialize validations
companyValidations.ValidateAll();
companyValidations.ClearAll();
StateHasChanged();
}