所有,
环境:ASP.NET 2.0,AjaxToolkit建立1.0.20229.0,IE9
我使用$ find()方法找到一个行为的调用扩展器,所以我可以显式使用.show()方法显示。不幸的是,$ find()返回null。
$find('my auto generated behvaiour Id').show();
FYI:本BehaviorID在ValidatorCalloutExtender使用控制的客户端ID生成(ClientID_ +“BehaviourID” < - 也是我在我的$查找()函数中使用),因为我有这个控制的许多实例在同一页上。
我看着渲染代码,我可以看到JS创建一个用于创建行为:
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.ValidatorCalloutBehavior ...
的$ find()方法执行一个UpdatePanel和回报总是空一回发后。编辑(新增): 我创建了新页面,下面是代码,find()返回仍然为null, - Ajax控件中是否存在一个bug,用于ASP.NET 2.0?
<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)时,有错误,因此,如果没有错误,你无法找到它。
现在问题是:如何在显示呼叫之前重新定位呼叫扩展器baloon?它真的赶上了22,当它没有被显示时,你不能访问它,当它被显示时,它已经迟到了,因为它显示在错误的地方。
为什么您决定使用control + BehaviorID的ClientID生成的扩展器组件ID?如果您为扩展器指定了BehaviorID属性,则应该将其用作$ find方法中的组件ID。 –
因为它是一个不止一次出现在页面上的用户控件,这意味着如果我设置了BehaviorID ='myID',它将不会是唯一的。不过,我创建了一个简单的页面,包含ValidatorCalloutExtender,分配了一个唯一的行为ID,$ find('分配的行为ID')仍然没有找到它。在框架中必须有一个错误。我正在使用ASP.NET 2.0,用于ASP.net 2.0的Ajax工具包。 – ActiveX
在JS调试器中观察之后,我意识到验证器标注扩展器仅在出现错误时才会出现(动态添加到DOM),因此,如果没有错误,则无法找到它。 – ActiveX