![](/img/trans.png)
[英]Calling user controls embedded in Main window from a Control in User Control
[英]Calling user control javascript functions from a new window (where the user controls are in the opener)
我有一個用戶控件,它將打開一個用於選擇某些項目的新窗口。 在該窗口上選擇一個項目后,該項目ID應該傳遞給用戶控件中的回調JavaScript函數。
為了在用戶控件中具有唯一的回調函數名稱(它可能在同一頁面上具有多個實例),我將用戶控件ID添加到函數名稱中,如下所示(在ascx文件中定義):
function OnItemSelection_<%=this.ID%>(selectedItemID)
{
OnItemSelection("<%=SomeControl.ClientID%>", selectedItemID)
}
在外部js文件中定義了OnItemSelection的地方:
function OnItemSelection(controlID, selectedItemID)
{
$(controlID).do_something(selectedItemID);
}
問題是,現在我不確定新頁面如何調用(從中打開用戶控件實例的)“正確”功能。
到目前為止,我唯一想到的想法是在查詢字符串中傳遞回調函數的名稱:
var CallbackFunction = function(selectedItemID)
{
window.opener.<%=Request.QueryString["CallbackFunctionName"]%>(selectedItemID);
}
或者可能只是打開的用戶控件ID:
var CallbackFunction = function(selectedItemID)
{
window.opener.OnItemSelection_<%=Request.QueryString["UserControlID"]%>(selectedItemID);
}
我的問題是:
1)傳遞像這樣的javascript函數名稱(或用戶控件ID)(我懷疑是)是一種不好的做法?
2)有什么更好的方法來處理這種情況?
編輯:
我現在考慮的另一種方法是在用戶控件中聲明一個全局變量(從后面的代碼中注冊它,因此它只會出現一次)。 然后,在打開新窗口時,可以為其分配相關功能(OnItemSelection _ <%= this.ID%>),然后從新窗口中調用它。
似乎比通過查詢字符串傳遞用戶控制數據更干凈。
據我所知,在這些情況下的最佳實踐是打開一個模態窗口,女巫將僅返回帶有設置窗口返回值的id。
您可以使用返回的Id參數(返回值)輕松進行決策。
在父窗口中:
var returnValue = window.showModalDialog("modalUrl.htm", "", sFeatures);
// use returned parameter
在模式窗口中:
window.returnValue = 12; //your Selected Item Id or etc
這很簡單,也是最常用的做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.