C# 动态添加ASP.NET验证控件

C# 动态添加ASP.NET验证控件,c#,asp.net,C#,Asp.net,有点小麻烦,我已经想了好几个小时了 我有三个面板,其中两个在任何给定时间都可见=false。三个面板中有两个具有需要验证用户输入的文本框。下面的代码循环遍历所有三个面板中的所有控件,并为每个文本框创建两个验证控件 第一个面板“设置”仅允许数字。这两种验证都按预期捕获错误 第二个面板ConfigImages有三个文本框。两个允许文本/数字/有限符号,需要输入。第三个需要一个URL。验证程序没有在这些文本框上启动 你知道为什么这些验证器没有启动吗 代码隐藏 //Initialize

有点小麻烦,我已经想了好几个小时了

我有三个面板,其中两个在任何给定时间都可见=false。三个面板中有两个具有需要验证用户输入的文本框。下面的代码循环遍历所有三个面板中的所有控件,并为每个文本框创建两个验证控件

第一个面板“设置”仅允许数字。这两种验证都按预期捕获错误

第二个面板ConfigImages有三个文本框。两个允许文本/数字/有限符号,需要输入。第三个需要一个URL。验证程序没有在这些文本框上启动

你知道为什么这些验证器没有启动吗

代码隐藏

        //Initialize page validation
        foreach (Panel p in this.Form.Controls.OfType<Panel>().ToList())   
        {
            foreach (TextBox ctrl in p.Controls.OfType<TextBox>().ToList())
            {
                //add a new RequiredFieldValidator for each textbox
                this.Form.Controls.Add(new RequiredFieldValidator()
                {
                    //set the properties of the new RequiredFieldValidator
                    ControlToValidate = ctrl.ID.ToString(),
                    Display = ValidatorDisplay.None,
                    Enabled = true,
                    ErrorMessage = ctrl.ID.Substring(3) + " Field cannot be empty"
                }
                );

                //Add a new RegularExpressionValidator for each textbox
                this.Form.Controls.Add(new RegularExpressionValidator()
                {
                    //set the properties of the new RegularExpressionValidator
                    ControlToValidate = ctrl.ID.ToString(),
                    Display = ValidatorDisplay.None,
                    Enabled = true,
                    ErrorMessage = ctrl.ID.Substring(3) + " field has invalid characters",
                    //Double Ternary Allows 0-255 for all Settings textbox , a-zA-Z0-9'!#$%&'*+/=?^_`{|}~.- for Slide Text
                    //or URL for URL textbox
                    ValidationExpression = (ctrl.Parent.ID == "pnlSettings") ? @"^[0-9]*$" :
                        (ctrl.ID == "txtUrl") ? @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?" :
                        @"^[a-zA-Z0-9#$%&@?""{}[]]*$"
                }
                );
            }
        }
        //Add Validation Summary        
        this.Form.Controls.Add(new ValidationSummary() { ShowMessageBox = true, ShowSummary = false });

1您是否已调试完毕,以查看是否正确添加了验证器?2为什么需要动态添加验证程序?你不能在需要的时候将它们设置为visible=true吗?在哪个页面事件期间添加这些?此外,您可以将ToList放在顶部的两个foreach循环上。在页面中,所有验证程序都被正确添加。我不得不添加.ToList,因为VS抱怨foreach的源代码在循环之间被修改。我认为通过代码来实现这一点要比将20多个控件放到markupI中容易得多。我想,我只是在以下情况下调用此代码!因此,当我发回以使第二个面板可见时,控件不在那里。谢谢你的意见^^