2010-04-29 63 views
2

我有一個綁定到多個自定義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

+0

editControl是一個CustomControl或它的任何或基本的asp.net輸入控件? – 2010-04-29 12:48:50

回答

2

你必須使用editControl.IDeditControl.UniqueID

還要考慮到,如果editControl必須的東西,可以與必需的字段vaidator一起使用。這對所有輸入控件的驗證器都沒有意義。

編輯
選中此鏈接。這可能是有幫助的,因爲它是exaclty你需要
http://support.microsoft.com/kb/310082

+0

嗨,感謝您的回覆 是的,我有許多用於驗證的自定義數據類型的ovverides。 但我應該使用editControl.ID甚至認爲控制呈現與id和name = this.UniqueID? – nat 2010-04-29 12:49:30

+0

所以我不能驗證這一點?即使editcontrol包含一個標準的文本框? 我可以使用自定義驗證器嗎? 謝謝 – nat 2010-04-29 13:05:29

+0

嗨再次 謝謝你,添加驗證屬性做了伎倆 – nat 2010-05-01 21:26:40