有一点麻烦,我已经想弄清楚几个小时了。
我有三个面板,其中两个在任何给定时间都是可见的=假。三个面板中的两个具有需要验证用户输入的文本框。下面的代码循环遍历所有三个面板中的所有控件,并为每个文本框创建两个验证控件。
第一个面板,设置,只允许数字。两个验证都按预期捕获错误。
第二个面板 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 });