首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找出Blazor EditContext中哪些属性存在验证错误?

如何找出Blazor EditContext中哪些属性存在验证错误?
EN

Stack Overflow用户
提问于 2021-02-26 01:52:47
回答 1查看 206关注 0票数 1

我有一个

,我遇到了一些问题,因为某些东西导致了验证错误,但并没有绑定到窗体上的控件。

为了澄清,我有一个表单模型(为了清楚起见,删除了一些属性)……

代码语言:javascript
复制
public class RenewalViewModel {
    public int CurrentTermId { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public ObservableCollection AvailableCompanies { get; set; }
}

不会显示在表单上,但在提交表单时需要用来标识术语。

一些省略的属性显示在表单上,可以由用户编辑,这些属性是保存数据时使用的。

除此之外,还有一些属性,例如

它们保存验证所需的数据,但在提交表单时不会使用。我需要在模型上使用它们,这样验证器就可以看到它们(我正在使用

FluentValidation

)。

我怀疑,但不确定,不知何故,这些相关属性之一(例如

或与其相关联的某些东西)已被改变,并且处于无效状态。但是,我不知道如何找出哪个对象的哪个属性导致了验证错误,以便找出为什么会发生这种错误。

为了尝试弄清楚发生了什么,我将表单的提交处理程序更改为如下所示……

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

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

有没有办法找出是哪些属性导致了错误?我看了一下

,但在那里看不到任何有用的东西。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-01 09:42:57

因为某些东西导致了验证错误

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

验证错误通常出现在表单中:需要填写名字...BirthofDate是required...etc。因此,大多数情况下,我们都知道哪里出了问题。

我建议您尝试以下代码来定位错误的来源:

代码语言:javascript
复制
@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);
            }

        }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66373887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档