我似乎在這個問題上有很多論壇帖子/回覆,但我沒有更接近到一個解決方案。ASP.NET動態控件和驗證器 - 無法找到'...'的'ControlToValidate'屬性引用的控件ID'...'
我正在從數據庫加載重複數據結構到事件處理程序中的UpdatePanel控件。重複的次數各不相同,所以控件都會被創建並動態添加到容器面板中。用戶有能力編輯數據,所以我也動態地創建驗證控件(RegularExpressionValidator
s)
問題在於設置驗證程序的ControlToValidate屬性。無論我如何設置,我都會從ASP.NET AJAX JS引發的服務器中獲取Unable to find control id '...' referenced by the 'ControlToValidate' property of '...'
錯誤響應。
控制添加代碼的短版看起來是這樣的:
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);
正如你可以看到這兩個控件添加到同一容器中,驗證器的文本框後,並將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錯誤中的「缺失」ID沒有以ct100爲前綴... – tomfumb