blazor - 如何找出 Blazor EditContext 中哪些属性存在验证错误?
问题描述
我有一个EditForm
, 并且遇到了一些问题,因为某些东西导致了验证错误,但不是绑定到表单上的控件的东西。
为了澄清,我有一个表格模型(为了清楚起见,删除了一些属性)......
public class RenewalViewModel {
public int CurrentTermId { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public ObservableCollection<CompanyOverview> AvailableCompanies { get; set; }
}
CurrentTermId
未显示在表单上,但在提交表单时用于标识术语。Start
,End
一些省略的属性显示在表单上,用户可以编辑,ad 是保存数据时使用的。
除此之外,还有一些属性,例如AvailableCompanies
保存验证所需的数据,但在提交表单时不使用。我需要在模型上使用它们,以便验证器可以看到它们(我正在使用FluentValidation)。
我怀疑,但不确定,不知何故,这些关联的属性之一(例如 aCompanyOverview
或与之关联的东西)已被更改,并且处于无效状态。但是,我不知道如何找出哪个对象的哪个属性导致了验证错误,以便找出它发生的原因。
为了尝试弄清楚发生了什么,我将表单的提交处理程序更改为如下所示...
private void OnSubmitRenew(EditContext ec) {
if (ec.ValidateObjectTree()) {
// Save the data
} else {
Debug.WriteLine("Invalid data: " + string.Join(". ", ec.GetValidationMessages()));
}
}
问题是这仅显示验证错误,而不是导致它们的属性。
有没有办法找出哪些属性导致了错误?我看了一下EditContext
,但在那里看不到任何有用的东西。
谢谢
解决方案
因为某些东西导致了验证错误
你怎么知道的 ?你被通知了吗?如果是这样,通知消息是什么?
验证错误通常采用以下形式:名字是必需的……BirthofDate 是必需的……等等。所以大多数时候我们都知道出了什么问题。
我建议您尝试使用此代码来定位错误的来源:
@code
{
private EditContext EditContext;
private RenewalViewModel Model = new RenewalViewModel();
protected override void OnInitialized()
{
EditContext = new EditContext(Model);
EditContext.OnFieldChanged += EditContext_OnFieldChanged;
base.OnInitialized();
}
// Note: The OnFieldChanged event is raised for each field in the model
private void EditContext_OnFieldChanged(object sender,
FieldChangedEventArgs e)
{
// Each time a field changes this code is executed.
EditContext.Validate() returns true if
// validation succeeded; that is, all fields pass validation
if (EditContext.Validate())
{
Console.WriteLine("Validation succeeded");
}
else
{
// This is the culprit
Console.WriteLine(e.FieldIdentifier.FieldName);
}
}
}
推荐阅读
- azure - 为在 Azure App Service Linux 上运行的容器创建卷
- ibm-cloud-infrastructure - SoftLayer API:如何取消网关设备集群的计费项
- c++ - C++ 中的 if 语句行为真的很奇怪
- sqlite - sqlite3 - Clang / GCC 编译错误 (macOS) - 示例代码 http://zetcode.com/db/sqlitec/
- python - Django 无法打开管理页面(网址更改并获取消息)
- javascript - 在 nodejs 中发出 GET 请求而不是重定向是否相同?
- python - Python 转换函数 - 数据框顺序已更改
- json - 重新部署到不同区域时出现 Azure 错误
- regex - 使用正则表达式匹配电子邮件地址
- php - Opencart 3.x:更改 adm 中的手动发票让添加禁用的产品