全部,
环境:ASP.NET 2.0,AjaxToolkit build 1.0.20229.0,IE9
我正在使用 $find() 来查找调用扩展器的行为,因此我可以使用 .show() 方法显式显示。不幸的是,$find() 返回 null。
$find('my auto generated behvaiour Id').show();
仅供参考:ValidatorCalloutExtender 上的 BehaviorID 是使用控件的 ClientID 生成的(ClientID_ + "BehaviourID" <- 也是我在 $find() 函数中使用的),因为我在同一页面上有许多此控件的实例。
我查看了呈现的代码,我可以看到创建行为的 JS:
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.ValidatorCalloutBehavior ...
$find() 在 UpdatePanel 中的回发之后执行并始终返回 null。
编辑(添加):我创建了新页面,下面是代码,find() 返回仍然为空,- ASP.NET 2.0 的 Ajax 控件中是否存在错误?
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScripManager1" runat="server" EnablePageMethods="True" >
</asp:ScriptManager>
<asp:TextBox runat="server" ID="txtInputField" />
<asp:RequiredFieldValidator runat="server" ID="valInput"
ControlToValidate="txtInputField"
ErrorMessage="ERROR STRING"
Display="none" /> <ajaxToolkit:ValidatorCalloutExtender runat="server" ID="extValInput" TargetControlID="valInput" BehaviorID="myID" />
<asp:Button runat="server" ID="btn" OnClick="btn_click" CausesValidation="True" />
<script type="text/javascript">
var obj = $find("myID");
alert(obj);
</script>
</form>
添加:在 JS 调试器中观察后,我意识到验证器标注扩展器仅在出现错误时出现(动态添加到 DOM),因此,如果没有错误,您将找不到它。
现在的问题是:如何在显示之前重新定位呼出扩展气球?真的是catch 22,不显示时无法访问,显示时已经晚了,因为它显示在错误的位置。