簡體   English   中英

注冊OnClientItemSelected為動態AutoCompleteExtender

[英]Register OnClientItemSelected for a Dynamic AutoCompleteExtender

我創建了一個包含AjaxControlToolkit的AutoCompleteExtender的UserControl。 當我在同一頁面上有一個或多個靜態設計的實例時,它會很好地工作。 但是,如果動態添加這些控件之一(例如,在UpdatePanel中),則該控件的<script>塊(我目前已將其嵌入到Source視圖中)似乎不可用(JavaScript抱怨它可以找不到我要連接到OnClientItemSelected的函數)。

我懷疑我需要在UserControl的PreRender事件中注冊腳本,因此即使將腳本動態添加到頁面中也可以使用它們。 我正在使用ToolkitScriptManager,並想象我需要調用ScriptManager.RegisterScriptControl(this); ;。 從我的控件中,然后實現IScriptControl接口。

這是正確的方法嗎? 如果是這樣,為了正確實現IScriptControl,是否需要將腳本塊從“源”視圖移到其自己的.js文件中? 那將迫使我重新設計我的JS函數,因為它調用內聯代碼來檢索該特定實例內子控件的ClientID:

var hiddenField = $get('<%=this.hfItemID.ClientID%>');

腳本管理和JS不是我的專長,因此我想確保這是正確的方向,然后再使能正常工作的UserControl復雜化,直到我開始以編程方式添加它們為止。

更新資料

我將javascript移到了后面的代碼中,並將其注冊為ClientScript,希望它可以使我更接近需要的位置:

string searchScript = "function " + this.aceItemSearch.ClientID + "_getByID(sender, e) { var hfield = $get('" + this.hfItemID.ClientID + "'); if (typeof hfield === 'undefined') return; var item = eval('(' + e._value + ')'); hfield.value = item.ID; if (typeof document != 'undefined') { var control = $get('" + this.btnSearch.ClientID + "'); } control.click(); }";    
Page.ClientScript.RegisterStartupScript(this.GetType(), aceItemSearch.ClientID + "_getByID", searchScript, true);

這適用於靜態放置的控件,但與以前一樣,不適用於動態添加的控件。 該腳本只是沒有進入源代碼視圖。

當調用RegisterStartupScript的5參數靜態版本時,將腳本移至后面的代碼即可。 提供UserControl本身作為第一個參數:

string searchScript = "function " + this.aceItemSearch.ClientID + "_getByID(sender, e) { var hfield = $get('" + this.hfItemID.ClientID + "'); if (typeof hfield === 'undefined') return; var item = eval('(' + e._value + ')'); hfield.value = item.ID; if (typeof document != 'undefined') { var control = $get('" + this.btnSearch.ClientID + "'); } control.click(); }";    
ScriptManager.RegisterStartupScript(this, this.GetType(), aceItemSearch.ClientID + "_getItemByID", searchScript, true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM