我有一個綁定到多個自定義dataitems的/中繼器類型驗證控件無法找到其控件來驗證
上的轉發器的代碼調用renderedit功能ItemDataBound事件是,根據自定義的數據類型將呈現自定義控件。它也將(如果驗證標誌被設置)呈現爲適當的渲染編輯控制
驗證控制編輯控件覆蓋的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;
}
問題是,本書雖然驗證控制.ControlToVa lidate屬性被設置爲editcontrol的uniqueid。 當我打開頁面時,出現以下錯誤: 無法找到'FieldRepeater_ctl01_ctl00_validator'的'ControlToValidate'屬性引用的控件ID'FieldRepeater $ ctl01 $ ctl00'。
我已經嘗試將createchildcontrols中的文字改爲新的TextBox(),然後設置id等等,但是我得到了類似的問題。
任何人都可以啓發我嗎? 是因爲控件渲染的順序?即驗證控件在編輯控件之前寫入? 或...
反正任何幫助非常感謝
感謝
NAT
editControl是一個CustomControl或它的任何或基本的asp.net輸入控件? – 2010-04-29 12:48:50