![](/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.