所有,
環境: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