【发布时间】:2011-12-01 19:20:01
【问题描述】:
我似乎有很多关于这个主题的论坛帖子/回复,但我离解决方案还差得远。
我正在将数据库中的重复数据结构加载到事件处理程序中的 UpdatePanel 控件中。重复次数会有所不同,因此所有控件都是动态创建并添加到容器面板中的。用户可以编辑数据,所以我还动态创建验证器控件 (RegularExpressionValidators)
问题在于设置验证器的 ControlToValidate 属性。无论我如何设置,我都会从服务器收到 Unable to find control id '...' referenced by the 'ControlToValidate' property of '...' 错误响应,然后由 ASP.NET AJAX JS 引发。
控件添加代码的简写如下:
TextBox licenseCode = new TextBox();
licenseCode.ID = this.getNextId(); // generated ID contains only [A-Za-Z], [0-9], :, -, .
licenseCode.MaxLength = 50;
this.purchaseEdit.Controls.Add(licenseCode); // this.purchaseEdit is an asp:Panel
RegularExpressionValidator licenseCodeVal = new RegularExpressionValidator();
licenseCodeVal.ControlToValidate = licenseCode.ClientID;
licenseCodeVal.ID = this.getNextId();
licenseCodeVal.ValidationGroup = this.purchaseEditSave.ValidationGroup; // save button within the panel
licenseCodeVal.ValidationExpression = @"^.{1," + licenseCode.MaxLength.ToString() + "}$";
licenseCodeVal.ErrorMessage = "Between 1 and " + licenseCode.MaxLength.ToString() + " chars.";
this.purchaseEdit.Controls.Add(licenseCodeVal);
如您所见,两个控件都添加到同一个容器中,验证器添加在 TextBox 之后,并且 ControlToValidate 属性当前设置为 TextBox 的 ClientID。 ID值我也试过了,但是不开心。
真正令人恼火的是,如果我不添加验证器,并且使用断点检查 TextBox 的 ClientID,我可以检查更新页面的 DOM 并找到 TextBox 的 ID 属性:
<input type="text" id="ctl00_ContentBody_PCTL::4890cc3a-8d07-4dee-aa9f-bdd8735fcaf8::licCode"... />
据我所知,我没有做错任何事,为什么会出现这个错误??
非常感谢任何建议。
【问题讨论】:
-
既然你在服务器端,为什么要引用控件来验证使用它的客户端ID而不是服务器ID?
-
正如我上面所说,我都尝试过,但都没有工作。使用服务器ID时唯一的区别是JS错误中的'missing' ID没有以ct100为前缀...
标签: asp.net updatepanel validation