我有一个名为DynamicGenericControl的用户控件。它实际上从它获得的属性生成文本框,下拉列表等,并将它们作为控件添加到页面。 例如
<uicontrol displayname="Manufacturer_Full Mfr Item #" datatype="DynamicGenericControl" colNumber="2" initRowNumber="1" isrequired="true" key="Vendor Name_Vendor Part Number" controltwotype="TextBox_TextBox" respondtoclick="true"></uicontrol>
在上面的示例中,我的用户控件生成两个文本框,因为我们有两列指定为property。 现在,我想为这两个字段添加isquiredfield验证器。我尝试添加它并导致以下异常。
System.Web.HttpException: Control 'Vendor_Name_Vendor_Part_Number' referenced by the ControlToValidate property of '' cannot be validated.
我刚用_替换空格。不过我也没试过。没有用。 如果我们观察到异常,那么“控制验证属性”就是欺骗我的原因。是不是我的Validator没有被添加,或者它无法找到我的ID?
这是我抛出此异常的代码。
private static void AddRequiredValidator(Panel panel, UIControl uicontrol, Control control, TableRow tr)
{
TableCell validatorCell = new TableCell();
validatorCell.Width = Unit.Point(4);
if (uicontrol.IsRequired)
{
RequiredFieldValidator reqfield = new RequiredFieldValidator();
reqfield.ControlToValidate = control.ID;
reqfield.ErrorMessage = uicontrol.DisplayName + " is required.";
reqfield.Text = " !";
reqfield.ForeColor = Color.Red;
reqfield.Enabled = true;
reqfield.Style.Add("vertical-align", "top");
validatorCell.Controls.Add(reqfield);
}
tr.Controls.Add(validatorCell);
我已编辑过包含整个方法......
以下是我从方法AddRequiredValidator(panel, control, ddl, tr);
调用的方式
其中panel是Panel类型,控件是UIControl,ddl是实际的dropdown或textbox控件,tr代表table row。
因为我错过了早先的完整代码。
答案 0 :(得分:0)
我认为您遇到的问题是您尝试将验证程序添加到常规Control
对象,但是您can only add them to controls that take user input - 即TextBox
,Dropdown
等等:
并非所有Web服务器控件都支持验证控件。可以使用验证控件验证的标准控件是:
- System.Web.UI.WebControls.DropDownList
- System.Web.UI.WebControls.FileUpload
- System.Web.UI.WebControls.ListBox
- System.Web.UI.WebControls.RadioButtonList
- System.Web.UI.WebControls.TextBox
- System.Web.UI.HtmlControls.HtmlInputFile
- System.Web.UI.HtmlControls.HtmlInputPassword
- System.Web.UI.HtmlControls.HtmlInputText
- System.Web.UI.HtmlControls.HtmlSelect
- System.Web.UI.HtmlControls.HtmlTextArea
要验证输入控件,必须将
System.Web.UI.ValidationPropertyAttribute
属性应用于控件。
因此,您需要将control
参数转换为适当的类型以对其应用验证。
您的错误消息令人困惑的原因是您没有向您的验证控件提供ID,因此该消息没有值显示给您。