验证用户控件,而不考虑页面控件

本文关键字:控件 不考虑 用户 验证 | 更新日期: 2023-09-27 18:23:47

每当发生回发时,我都要验证我的用户控件。这是我想要验证的用户控制愿望中的属性:

    public string Text
    {
        get
        {
            return DateTextBox.Text;
        }
        set
        {
            DateTextBox.Text = value;
        }
    }

Text属性必须始终具有类似"YYYY/MM/DD"的格式。我希望无论用户在哪里将此控件添加到每个页面,当用户提交任何按钮时,如果Text无效,则按钮提交事件不会引发。主要的问题是,我希望这个作品不改变任何页面。我的意思是不检查Page.IsValid之类的东西。

验证用户控件,而不考虑页面控件

您可以通过将ASP.Net验证控件添加到.ascx标记代码中来实现这一点。

尝试添加以下代码

<asp:CompareValidator
    id="dateValidator" runat="server" 
    Type="Date"
    Operator="DataTypeCheck"
    ControlToValidate="DateTextBox" 
    ErrorMessage="Please enter a valid date.">
</asp:CompareValidator>
<asp:RequiredFieldValidator 
    ID="RequiredFieldValidator1" 
    ControlToValidate="DateTextBox" 
    runat="server" 
    ErrorMessage="Required!">
</asp:RequiredFieldValidator>

但是,此方法的问题是,所有CauseValidation=False的按钮(保存或提交)都将尝试验证此TextBox。

为了克服这个问题,你需要

  1. 如果按钮在用户控件中,则将ValidationGroup添加到所有控件(文本框、验证控件、按钮等)

  2. 如果页面中有按钮向控件添加一个公共属性以保存ValidationGroup,并将该值分配给所有需要验证的控件和按钮。

尝试以下代码:-

 public string Text
        {
            get
            {
                return DateTextBox.Text;
            }
            set
            {
                try
               {
                    DateTime d = DateTime.ParseExact(value, "yyyy/MM/dd",CultureInfo.InvarientCulture);
                    DateTextBox.Text = value;
               }
               catch(Exception ex)
               {
                    //// Code when it does not match format.
               }
            }
    }