1.PopupControlExtener 是 ASP.NET AJAX Control Toolkit 中的一个控件,它关联两个控件,以使点击另一个控件时在该控件的周边浮动显示另一个控件,像网页上常见的日期选择就属于这种。
当关联一个按钮和一个 Panel 时容易遇到上述错误,解决办法是给按钮加上 UseSubmitBehavior="False" ,就不会出现该错误了。
如果按钮在 UpdatePanel 之外,一般应加上 OnClientClick="return false;"(此时可以不再设置 UseSubmitBehavior) 以避免回送后 PopupControl 不显示。
2.点击 PopupControlExtener 的 TargetControlID 对应的控件后,不出现 PopupControlID 对应的控件。
这是由于忘记给 PopupControlID 对应的控件设置样式表造成的。
应该给 PopupControlID 对应的控件设置 visibility:hidden; 样式表,注意是 visibility 属性,而不是 display 属性。
3.把 PopupControlExtener 即其 TargetControlID、PopupControlID 对应的控件放在 TabContainer 的 TabPanel 中后,PopupControlID 对应的控件位置不对,它显示在整个网页的左上端,而不是显示在 TargetControlID 对应的控件的四周。
这种有两个解决办法:
- 一是可以给 TargetControlID 对应的控件加上 OnClientClick="return false;"。
- 二是可以给 TabPanel 里面再套一层 div,给该 div 指定 position:relative;。
有时候如果 popupControlID 对应的控件需要回传,那么应该把二者结合起来使用。
4.点击 PopupControlID 对应的控件后,它不消失。
其实要让它消失,得用 PopupControlExtener 的 Commit 方法。具体用法是:
PopupControlExtener1.Commit("选择");
当点击 PopupControlID 对应的控件中的某些按钮或其他控件时,触发一个方法,该方法执行上面的代码,于是 TargetControlID 对应的控件的 value 属性被设置成 Commit() 参数的值。
我个人觉得 PopupControlExtender 设计得并不好,它有两个属性 TargetControlID 和 PopupControlID,它认为 TargetControl 触发 PopupControl,然后 PopupControl 中的控件的方法再赋值给 TargetControl。但是实际运行中,我们可能是三个控件参与:一个专门用于存储或显示 PopupControl 的选择值,一个 TargetControl 用于触发 PopupControl 显示,还有一个 PopupControl。另外它的赋值和让控件消失是一个方法,即 Commit,也让人用起来不方便。
这种情况下,我们根本用不到 CommitProperty,根本不能把值赋给第一个控件,我们只是利用它和 Commit 方法来让 PopupControl 消失罢了。