我有一个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);
}
}
}