我如何找出哪些属性在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和一些省略的属性显示在表单上,可由用户编辑,是保存数据时使用的。

除了这些,还有一些属性,比如AvailableCompanies,它保存验证所需的数据,但在提交表单时不使用。我需要它们在模型上,以便验证器可以看到它们(我使用FluentValidation)。

我怀疑,但我不确定,不知何故,这些相关的属性之一(例如CompanyOverview或与之相关的东西)已经改变,并且处于无效状态。但是,我不知道如何找出哪个对象的哪个属性导致验证错误,以便弄清楚它发生的原因。

为了尝试找出发生了什么,我改变了表单的提交处理程序,看起来像这样…

private void OnSubmitRenew(EditContext ec) {
if (ec.ValidateObjectTree()) {
// Save the data
} else {
Debug.WriteLine("Invalid data: " + string.Join(". ", ec.GetValidationMessages()));
}
}

问题是这只显示了验证错误,而没有显示是哪些属性导致了这些错误。

是否有办法找出是哪些属性导致了错误?我看了看EditContext,但看不到任何有用的东西在那里。

感谢

在某些事情导致验证错误

你怎么知道?你得到通知了吗?如果是,通知消息是什么?

验证错误通常以以下形式出现:First name is required…需要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);
}
}
}

相关内容

  • 没有找到相关文章

最新更新