以下是我用来在aspx页面中显示Telerik(Radwindow)弹出窗口的代码。它成功显示具有以下当前代码的窗口。
如何从ASP.NET Usercontrol显示弹出窗口?
RadWindowManager windowManager = new RadWindowManager();
RadWindow window1 = new RadWindow();
window1.NavigateUrl = "Window1.aspx";
window1.ID = "RadWindow1";
window1.VisibleOnPageLoad = true; // Set this property to True for showing window from code
windowManager.Windows.Add(window1);
this.form1.Controls.Add(window1);
答案 0 :(得分:2)
当然,您可以使用此方法存在两个问题:
用户控件必须知道母版页上的窗口管理器和窗口,遍历控件层次结构并找到它们
如果您将整个代码段添加到用户控件中,您最终会得到几个窗口管理器实例,这会对您产生一些技巧(请参阅here)。
所以,请考虑以下想法:
将RadWindow实例添加到用户控件(而不是RadWindowManager)并单独使用它。阅读this article以从服务器注册脚本以打开它,并this article创建可能需要每个用户控件唯一的JS功能。
完全从客户端打开RadWindow,如图here所示。你可以register a JS function from the server传递你需要的参数(URL,模态,等等)
以下是基于您的评论的其中一个想法(我将使用)的示例实现:
母版页
<telerik:RadWindowManager ID="RadWindowManager1" runat="server"></telerik:RadWindowManager>
<script>
function openDialog(url, modal, width, height) {
if (radopen) { //if not, there is no RadWindowManager on the page, add an else{} block to use window.open() or other logic
var wnd = radopen(url, null);
wnd.set_destroyOnClose(true);
//add checks here in case parameters have not been passed
wnd.setSize(width, height);
wnd.center();
wnd.set_modal(modal);
}
}
</script>
用户控制标记
<asp:Button ID="Button1" Text="open RW" OnClick="Button1_Click" runat="server" />
使用控制代码隐藏
protected void Button1_Click(object sender, EventArgs e)
{
bool flag = true;
if(flag)
{
string script = string.Format("function f(){{openDialog('{0}', {1}, {2}, {3});Sys.Application.remove_load(f);}}Sys.Application.add_load(f);",
"the-page.aspx",
"true",
600,
400);
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "someKey", script, true);
}
}