silverlight – 自定义ValidationAttribute的ValidationErrors未正确显示

silverlight – 自定义ValidationAttribute的ValidationErrors未正确显示,第1张

概述我有一个我创建的ValidationAttribute,它在Server和Client之间共享.为了在数据助手类中引用时将验证属性正确生成到客户端,我必须非常具体地构建它. 我遇到的问题是,由于某种原因,当我从自定义验证属性类返回ValidationResult时,它的处理方式与客户端UI上的其他验证属性不同.而不是显示错误,它什么都不做.它会正确验证对象,但它不会显示失败的验证结果. 下面是我的 我有一个我创建的ValIDationAttribute,它在Server和ClIEnt之间共享.为了在数据助手类中引用时将验证属性正确生成到客户端,我必须非常具体地构建它.

我遇到的问题是,由于某种原因,当我从自定义验证属性类返回ValIDationResult时,它的处理方式与客户端UI上的其他验证属性不同.而不是显示错误,它什么都不做.它会正确验证对象,但它不会显示失败的验证结果.

下面是我的一个自定义验证类的代码.

using System;using System.Collections.Generic;using System.linq;using System.Text;using System.ComponentModel.DataAnnotations;namespace Project.Web.DataLayer.ValIDationAttributes{    [AttributeUsage(AttributeTargets.Property | AttributeTargets.FIEld,AllowMultiple = false)]    public class disallowedChars : ValIDationAttribute    {        public string disallowedCharacters        {            get            {                return new string(this.disallowedCharacters);            }            set            {                this.disallowedCharacters = (!this.CaseSensitive ?     value.Tolower().tochararray() : value.tochararray());            }        }        private char[] disallowedCharacters = null;        private bool caseSensitive;        public bool CaseSensitive        {            get            {                return this.caseSensitive;            }            set            {                this.caseSensitive = value;            }        }        protected overrIDe ValIDationResult IsValID(object value,ValIDationContext    valIDationContext)        {            if (value != null && this.disallowedCharacters.Count() > 0)            {                string Value = value.ToString();                foreach(char val in this.disallowedCharacters)                {                    if ((!this.CaseSensitive && Value.Tolower().Contains(val)) ||     Value.Contains(val))                    {                        return new ValIDationResult(string.Format(this.ErrorMessage != null ? this.ErrorMessage : "'{0}' is not allowed an allowed character.",val.ToString()));                    }                }            }            return ValIDationResult.Success;        }    }}

这就是我在服务器和客户端上的属性上面使用它的方法.

[disallowedChars(disallowedCharacters = "=")]

我已经尝试了几种不同的方法来设置绑定.

{Binding Value,NotifyOnValIDationError=True}

以及

{Binding Value,NotifyOnValIDationError=True,ValIDatesOnDataErrors=True,ValIDatesOnExceptions=True,ValIDatesOnNotifyDataErrors=True}

这些似乎都不会使他们绑定的表单也验证条目.我已经尝试在绑定到TextBoxes,XamGrIDs的值上使用此属性,并且这两个值都没有像他们那样正确验证.

这个问题似乎只是在我尝试在服务器端使用ValIDationResult时.如果我对视图模型中的值使用验证结果,那么它将正确验证.我需要找到一种方法来从生成的代码中正确验证.

任何想法都会非常感激.

解决方法 您需要指定与ValIDationResult关联的Membernames. ValIDationResult的构造函数有一个附加参数来指定与结果关联的属性.如果未指定任何属性,则结果将作为实体级别的验证错误处理.

因此,在您的情况下,当您将属性的名称传递给ValIDationResult的构造函数时,应该修复它.

protected overrIDe ValIDationResult IsValID(object value,ValIDationContext valIDationContext) { if (value != null && this.disallowedCharacters.Count() > 0) {   string Value = value.ToString();   foreach(char val in this.disallowedCharacters) {     if ((!this.CaseSensitive && Value.Tolower().Contains(val)) || Value.Contains(val)) {       //return new ValIDationResult(string.Format(this.ErrorMessage != null ? this.ErrorMessage : "'{0}' is not allowed an allowed character.",val.ToString()));       string errorMessage = string.Format(this.ErrorMessage != null ? this.ErrorMessage : "'{0}' is not allowed an allowed character.",val.ToString());       return new ValIDationResult(errorMessage,new string[] { valIDationContext.Membername});     }   } } return ValIDationResult.Success;}

对于绑定,您不需要指定任何其他内容.所以简单的Binding

{Binding Value}

应该显示错误,导致ValIDatesOnNotifyDataErrors隐式设置为true. NotifyOnValIDationError将ValIDationErrors填充到ValIDationSummary等其他元素.

Jeff Handly在WCF Ria Services和Silverlight中有一个关于验证的真正goog blog post,我可以推荐阅读.

总结

以上是内存溢出为你收集整理的silverlight – 自定义ValidationAttribute的ValidationErrors未正确显示全部内容,希望文章能够帮你解决silverlight – 自定义ValidationAttribute的ValidationErrors未正确显示所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1209357.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存