验证控件无法找到其控件进行验证

时间:2010-04-29 12:36:16

标签: c# asp.net validation custom-controls

我有一个绑定到许多自定义数据项/类型的转发器

在转发器的itemdatabound事件上,代码调用一个renderit函数,该函数依赖于自定义数据类型将呈现自定义控件。它还将(如果设置了验证标志)为适当的渲染编辑控件呈现验证控件

编辑控件会覆盖自定义控件的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
}

验证控件的呈现方式如下:传入的editcontrol是控件实例,上面的createchildcontrols是一个方法..

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;
}

问题是,尽管验证控件.ControlToValidate属性设置为editcontrol的uniqueid。 当我点击页面时,我收到以下错误: 无法找到'FieldRepeater_ctl01_ctl00_validator'的'ControlToValidate'属性引用的控件ID'FieldRepeater $ ctl01 $ ctl00'。

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

任何人都可以开导我吗? 这是因为控件的呈现顺序?即在editcontrol之前写入验证控件? 或者......

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

感谢

NAT

1 个答案:

答案 0 :(得分:2)

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

还要考虑如果editControl必须是可以与必需的字段vaidator一起使用的东西。对于所有输入控件,这个验证器没有意义。

修改
检查此链接。它可能会有所帮助,因为它是你所需要的 http://support.microsoft.com/kb/310082