C# 验证控件找不到要验证的控件

C# 验证控件找不到要验证的控件,c#,asp.net,validation,custom-controls,C#,Asp.net,Validation,Custom Controls,我有一个中继器,它绑定到许多自定义数据项/类型 在中继器的itemdatabound事件上,代码调用renderedit函数,该函数将根据自定义数据类型呈现自定义控件。它还将(如果设置了验证标志)为相应的渲染编辑控件渲染验证控件 编辑控件会覆盖自定义控件的CreateChildControls()方法,从而添加许多literalControls protected override void CreateChildControls() { //other bits removed - b

我有一个中继器,它绑定到许多自定义数据项/类型

在中继器的itemdatabound事件上,代码调用renderedit函数,该函数将根据自定义数据类型呈现自定义控件。它还将(如果设置了验证标志)为相应的渲染编辑控件渲染验证控件

编辑控件会覆盖自定义控件的CreateChildControls()方法,从而添加许多literalControls

protected override void CreateChildControls()
{
    //other bits removed - but it is this 'hidden' control i am trying to validate
    this.Controls.Add(new LiteralControl(string.Format(
                                         "<input type=\"text\" name=\"{0}\" id=\"{0}\" value=\"{1}\" style=\"display:none;\" \">"
                                         , this.UniqueID
                                         , this.MediaId.ToString())
                                         ));
    //some other bits removed
}
问题是,尽管validation控件。ControlToValidate属性设置为editcontrol的唯一ID。 当我点击页面时,出现以下错误: 找不到由“FieldRepeater\u ctl01\u ctl00\u validator”的“ControlToValidate”属性引用的控件id“FieldRepeater$ctl01$ctl00”

我尝试将createchildcontrols中的文本更改为新的TextBox(),然后设置id等,但我遇到了类似的问题

谁能启发我? 这是因为控件呈现的顺序吗?ie验证控件在editcontrol之前写入? 或者

无论如何,任何帮助都非常感谢

谢谢


nat

您必须使用
editControl.ID
而不是
editControl.UniqueID


还要考虑到if
editControl
必须是可与必填字段vaidator一起使用的内容。此验证器对于所有输入控件都没有意义。

您必须使用
editControl.ID
而不是
editControl.UniqueID


还要考虑到if
editControl
必须是可与必填字段vaidator一起使用的内容。此验证器对所有输入控件都没有意义。

editControl是CustomControl,或者它是任何或基本的asp.net输入控件?editControl是CustomControl,或者它是任何或基本的asp.net输入控件?您好,谢谢您的回复是的,我有许多用于验证的不同自定义数据类型的ovverides。但是我应该使用editControl.ID,即使控件是用ID和name=this.UniqueID呈现的?所以我根本无法验证它?即使editcontrol包含标准文本框?我可以使用自定义验证器吗?谢谢再次感谢,添加validationproperty做了trickhi谢谢你的回复是的,我有很多ovverides用于验证不同的自定义数据类型。但是我应该使用editControl.ID,即使控件是用ID和name=this.UniqueID呈现的?所以我根本无法验证它?即使editcontrol包含标准文本框?我可以使用自定义验证器吗?再次感谢,添加validationproperty起到了作用
public override Control RenderValidationControl(Control editControl)
{
    Control ctrl = new PlaceHolder();

    RequiredFieldValidator req = new RequiredFieldValidator();
    req.ID = editControl.ClientID + "_validator";
    req.ControlToValidate = editControl.UniqueID;
    req.Display = ValidatorDisplay.Dynamic;
    req.InitialValue = "0";
    req.ErrorMessage = this.Caption + " cannot be blank";
    ctrl.Controls.Add(req);

    return ctrl;
}