
我遇到的问题是,由于某种原因,当我从自定义验证属性类返回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未正确显示所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)