我有一个
,我遇到了一些问题,因为某些东西导致了验证错误,但并没有绑定到窗体上的控件。
为了澄清,我有一个表单模型(为了清楚起见,删除了一些属性)……
public class RenewalViewModel {
public int CurrentTermId { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public ObservableCollection AvailableCompanies { get; set; }
}不会显示在表单上,但在提交表单时需要用来标识术语。
一些省略的属性显示在表单上,可以由用户编辑,这些属性是保存数据时使用的。
除此之外,还有一些属性,例如
它们保存验证所需的数据,但在提交表单时不会使用。我需要在模型上使用它们,这样验证器就可以看到它们(我正在使用
FluentValidation
)。
我怀疑,但不确定,不知何故,这些相关属性之一(例如
或与其相关联的某些东西)已被改变,并且处于无效状态。但是,我不知道如何找出哪个对象的哪个属性导致了验证错误,以便找出为什么会发生这种错误。
为了尝试弄清楚发生了什么,我将表单的提交处理程序更改为如下所示……
private void OnSubmitRenew(EditContext ec) {
if (ec.ValidateObjectTree()) {
// Save the data
} else {
Debug.WriteLine("Invalid data: " + string.Join(". ", ec.GetValidationMessages()));
}
}问题是,这只显示了验证错误,而没有显示是哪些属性导致了这些错误。
有没有办法找出是哪些属性导致了错误?我看了一下
,但在那里看不到任何有用的东西。
谢谢
发布于 2021-03-01 09:42:57
因为某些东西导致了验证错误
你怎么知道的?你收到通知了吗?如果是,通知消息是什么?
验证错误通常出现在表单中:需要填写名字...BirthofDate是required...etc。因此,大多数情况下,我们都知道哪里出了问题。
我建议您尝试以下代码来定位错误的来源:
@code
{
private EditContext EditContext;
private RenewalViewModel Model = new Comment();
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);
}
}
}https://stackoverflow.com/questions/66373887
复制相似问题