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

C# 验证用户控件而不考虑页面控件,c#,asp.net,validation,C#,Asp.net,Validation,我想在回发时验证我的用户控件。这是我希望验证的usercontrol中的属性: public string Text { get { return DateTextBox.Text; } set { DateTextBox.Text = value; } } Text属性的格式必须始终为“YYYY/MM/DD”。我希望无论用户在

我想在回发时验证我的用户控件。这是我希望验证的usercontrol中的属性:

    public string Text
    {
        get
        {
            return DateTextBox.Text;
        }
        set
        {
            DateTextBox.Text = value;
        }
    }
Text
属性的格式必须始终为“YYYY/MM/DD”。我希望无论用户在何处向每个页面添加此控件,当用户提交任何按钮时,如果
文本
无效,则不会引发按钮提交事件。主要的问题是,我希望这个作品不改变任何页面。我的意思是不检查像
Page.IsValid这样的内容

试试下面的代码:-

 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.
               }
            }
    }

您可以通过将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的按钮(保存或提交)都将尝试验证此文本框

要克服这个问题,您需要

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

  • 如果页面中有按钮 将公共属性添加到控件以保存ValidationGroup,并将此值分配给所有需要验证的控件和所有按钮


  • 此方法不会停止回发