Infragistics 11.2 - 13.1: WebDatePicker. ValidatorCalloutExtender appears at top left of the PAGE, not next to the control. According to Infragistics:
------------
After some research, I have come across some information where this has been reported for a similar control before. Our developer had the following to say about the WebTextEditor, which the WebDatePicker is inherited from:
The WebTextEditor implements support for standard asp validators by swapping target html element from original (INPUT or TABLE) element to dynamically created SPAN. Otherwise, validation logic, used by asp validator, would fail for several reasons. For example, focus/not-focus strings in INPUT are different and do not represent actual value in editor. Also value can be modified with delay after actual browser-blur event.
The WebTextEditor always keeps correct value in that dynamic SPAN, updates that value on all changes and that allows to solve synchronization problems and comply with validation rules. That SPAN is added to the <body>, it has position:absolute and it has id=ClientID_of_editor+":v:".
I debugged javascript used by ValidatorCalloutExtender and found that while calculations of its pop-up-bounds, it uses not bounds of actual validator to which extender is assigned to (that would be SPAN-id=RequiredFieldValidator1), and not bounds of html-element-editor to which validator should validate (that would be INPUT-id=NameWebTextEditor), but bounds of internal variable stored on client by validator (which is dynamically created SPAN-id=NameWebTextEditor:v:).
-----------
------------
After some research, I have come across some information where this has been reported for a similar control before. Our developer had the following to say about the WebTextEditor, which the WebDatePicker is inherited from:
The WebTextEditor implements support for standard asp validators by swapping target html element from original (INPUT or TABLE) element to dynamically created SPAN. Otherwise, validation logic, used by asp validator, would fail for several reasons. For example, focus/not-focus strings in INPUT are different and do not represent actual value in editor. Also value can be modified with delay after actual browser-blur event.
The WebTextEditor always keeps correct value in that dynamic SPAN, updates that value on all changes and that allows to solve synchronization problems and comply with validation rules. That SPAN is added to the <body>, it has position:absolute and it has id=ClientID_of_editor+":v:".
I debugged javascript used by ValidatorCalloutExtender and found that while calculations of its pop-up-bounds, it uses not bounds of actual validator to which extender is assigned to (that would be SPAN-id=RequiredFieldValidator1), and not bounds of html-element-editor to which validator should validate (that would be INPUT-id=NameWebTextEditor), but bounds of internal variable stored on client by validator (which is dynamically created SPAN-id=NameWebTextEditor:v:).
-----------