必需字段验证器的ControltoValidate属性
本文关键字:ControltoValidate 属性 验证 字段 | 更新日期: 2023-09-27 17:50:17
我有一个名为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>
在上面的例子中,我的用户控件生成两个文本框,因为我们有两个列指定为属性。现在,我想为这两个字段添加arequiredfield验证器。我尝试添加它,结果出现以下异常:
System.Web.HttpException: Control 'Vendor_Name_Vendor_Part_Number' referenced by the ControlToValidate property of '' cannot be validated.
我只是用_替换了空格。然而,我也试过不这样做。毫无效果。如果我们观察到异常,"的Controltovalidate属性是什么欺骗我。是我的验证器没有添加,还是它找不到我的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是面板类型,control是UIControl, ddl是实际的下拉框或文本框控件,tr表示表行。
抱歉,我之前没有包含完整的代码。
我认为你遇到的问题是,你正试图添加一个验证器到一般的Control
对象,但你只能将它们添加到接受用户输入的控件-即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,所以消息没有一个值显示给你。