none
silverlight的验证控件到底怎么验证的?太奇怪了!! RRS feed

  • 问题

  • xmlns:dataform="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm"
    
    
    
    ……
    
    <TextBox x:Name="zip" Text="{Binding Zip, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" />
    
    <dataform:DescriptionViewer  Target="{Binding ElementName=zip}"  />
    
    
    
    




    我最近在读一套控件的demo,一个要求输入zip的文本框,一个对这个文本框的验证。

    我输入了“张三”,验证控件出现了,红色的底,几个汉字“输入的字符串格式不对”

    我又输入了“123”,出现另外一句话,英文的,大概意思是“只能为5位数字”。



    我很迷惑的是:这些验证的方式,和验证之后的文字,在哪儿呢?咋在代码里就找不到。

    如果我想修改验证后的文字,怎么修改呀,或者我不想验证zip,我想验证是否为空,或验证是否为email。


    纳闷了,几个验证控件都一样,只显示了Target绑定了哪个控件,怎么就没显示验证的方式,验证的文字呢???

    后台代码也没找到。觉得很纳闷。

    谢谢呀。
    • 已编辑 woodynet 2009年5月10日 17:17
    2009年5月10日 17:09

答案

  • Silverlight是异步处理的RIA程序,如果只验证某TextBox添加
            private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
            {
                if (sender != null)
                {
                    Regex myReg = new Regex("^\\d*$");
                    string str = ((TextBox)(sender)).Text;
                    HtmlPage.Window.Alert(myReg.IsMatch(str).ToString());
                }
            }
    就可以了,没必要非要用控件,要比asp.net灵活的多。

    控件不是Silverlight程序必须使用的,也不是所有应用用到某些控件了就是好程序:)
    • 已标记为答案 woodynet 2009年5月11日 9:18
    2009年5月11日 4:08
    版主

全部回复

  • contactGrid.DataContext = Contact.JohnDoe; 绑定到了内容

    验证都在Contact类里有写

            /// <summary>
            /// Gets or sets the zip code of the contact.
            /// </summary>
            [Required]
            [RegularExpression(@"^\d\d\d\d\d$", ErrorMessage = "Zip codes must be 5-digit numbers.")]
            [Display(Name = "Zip", Description = "Five-digit zip code", GroupName = "Address")]
            public int Zip
            {
                get
                {
                    return zip;
                }
                set
                {
                    if (value != zip)
                    {
                        Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Zip" });
                        zip = value;
                        OnPropertyChanged("Zip");
                    }
                }
            }
    在绑定的同时要把要数据验证的类型写在绑定类里
    2009年5月11日 0:03
    版主
  • 熊哥,谢谢你呀,最近给了我很多帮助。

    对这个仍旧有疑问,如果是这样把验证的正则表达式写在类里,而不是写在验证控件里的话??

    是不是本末倒置了。

    例如我要验证数值类型,难道在每个类的数值类型字段上都加这个RegularExpression吗?

    为什么不直接加在验证控件上,就可以了。

    和asp.net的思想好像不太一样呀。
    视别人的帮助为恩赐~
    2009年5月11日 3:42
  • Silverlight是异步处理的RIA程序,如果只验证某TextBox添加
            private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
            {
                if (sender != null)
                {
                    Regex myReg = new Regex("^\\d*$");
                    string str = ((TextBox)(sender)).Text;
                    HtmlPage.Window.Alert(myReg.IsMatch(str).ToString());
                }
            }
    就可以了,没必要非要用控件,要比asp.net灵活的多。

    控件不是Silverlight程序必须使用的,也不是所有应用用到某些控件了就是好程序:)
    • 已标记为答案 woodynet 2009年5月11日 9:18
    2009年5月11日 4:08
    版主
  • 哦~silverlight验证控件好像并未达到真正验证的目的,而只是给类里的属性加了一个RegularExpression而已。

    谢谢熊哥~
    视别人的帮助为恩赐~
    2009年5月11日 4:50
  • 现在的Silverlight好像并没有达到ASP.NET控件的程度,但未来肯定会像ASP.NET的验证功能一样,规则肯定应该可以写在控件里!不然就没有意义了,呵呵……

    My blog: http://blog.csdn.net/dotfun http://dotfun.cnblogs.com

    My contact: QQ:372900288 E-mail:372900288@qq.com msn:sellnet007@hotmail.com

    2009年5月12日 10:20
    版主