关于Silverlight validation验证问题,请教大家(截图)
这时现在的公司做的第二个Silverlight项目,但是遇到一个问题,就是在在进行客户端验证的时候:(如下图),我需要对用户输入的数据惊醒一些格式验证,比如非空验证,数字验证,邮箱验证等等,这里我的项目中用到了非空验证,下面的三个字段都是必填字段,其中Lotted Number 和Pen Number 是int类型的,Cattle Owner是string类型的,
我目前只是做了非空验证,但是程序运行后,上面两个int64型的字段,默认给我填入了两个0.但是这不是我想要的,我想要想第三个字段一样,默认那里什么不填,我在第三个输入框里随便输入点什么,然受再删除,就看到下图的情形
验证所捕获到的结果:CattleOwner can not be null 是我自定义的,这也是我想要的结果,但是上面两个字段我也定义了自定义验证,却补货不到我自己的验证,如下图
这里捕获的异常是:Input is not a correct format。而这句话我都不知道是从哪里来的,根本不是我自己定义的那个,我自己定义的是:Pen Number can not be null 却没有拋出来,这很是让人郁闷。
而我要是去实体entity 里面将第二个字段Pen Number 的类型改成string的话,就可以正常抛出我自定义验证信息,如下图,这是在将字段属性由原来的int64改成string之后
(事实上不管是int64,还是int,还是double,还是float,只要是数字类型都不能正常抛出验证信息,更可恶的是,它会默认给你填上0,这让人很不爽)
下面是我的相关前台和后台代码截图
最后总结一下问题:
1、我不希望在int ,double , float 等这些数字类型的时候给我默认填上 0 ,这让人很不爽!
2、我希望这几种验证都捕获我自己定义的养正信息,而不要用微软内部封装的那个验证信息抛给我!
3、最后问一下:我有一个textbox需要验证用户输入的信息,可以是数字和字母,但是不能是字符,比如说123a,be56,7fg8,这些都是合法的;但是12!,4@5,yu%7,这些就是不合法的,就是输入的内容不能有那些符号之类的东西,这个应该怎么验证呢???在网上也没有找到相关的正则表达式。
求各位高手不吝相助,冷秋寒,银光大师,震军.........,这些都是Silverlight牛人,多多向你们学习
[解决办法]
顶一下,学习一下sliverlight.
[解决办法]
1. 使用 int ,double , float 默认值本来就是0,这就像使用 DateTime 类型时默认值是 DataTime.MinValue 一样,没得说的。
如果不喜欢这样,可以使用 int? ,double? , float? ,DateTime? ;
2. “Input is not a correct format” 这很好理解啊,这并不是[Required]所抛出来的异常,
而是输入的格式不能转化为 int 或 double 导致的异常。
3. 使用 [RegularExpression]
/// <summary>/// 编号:仅字母、数字-_. ,即 ^[a-zA-Z0-9\\-_]$ 。/// </summary>public const string No = "^[a-zA-Z0-9\\-_.]*$";......[StringLength(28)][Display(Name = "OSCompanyOrderNo", ResourceType = (typeof(BizWords)))][RegularExpression(KnownRegex.No, ErrorMessageResourceName = "OnlyNo", ErrorMessageResourceType = (typeof(KnownSentences)))][System.Runtime.Serialization.DataMemberAttribute()]public string COdN{ get { return this.COdNField; } set { if ((object.ReferenceEquals(this.COdNField, value) != true)) { this.ValidateProperty("COdN", value); this.COdNField = value; this.RaisePropertyChanged("COdN"); } }}
[解决办法]
Sorry,楼主要的正则表达式应为
/// <summary>/// 仅字母、数字 ^[a-zA-Z0-9]$ 。/// </summary>public const string AlphabetOrNumber = "^[a-zA-Z0-9]*$";
[解决办法]
第一个问题很简单,就是加上一个判断条件就可以了,当为0的时候就处理一下就可以了。
第二个问题也不难,就是自己在标签中的“错误”属性改成你想要的效果就可以了,比如“当前输入有误”
第三个问题楼上已经帮你解决了