Any*_*are 15 c# asp.net ajax telerik radwindow
我有以下情况:
我的页面上有一个gridview:
page1.aspx
Run Code Online (Sandbox Code Playgroud)
我page2.aspx在rad窗口中通过gridview 打开另一个页面(),然后通过page2.aspx我的一些按钮打开最后一页(page3.aspx)rad window.
所有这些步骤都是通过服务器端代码执行的:
protected void OpenNewWindow(string url, int width, int height, int mode)
{
RadWindow newWindow = new RadWindow();
newWindow.NavigateUrl = url;
newWindow.VisibleOnPageLoad = true;
newWindow.KeepInScreenBounds = true;
newWindow.Skin = "Metro";
if (width > 0)
{
newWindow.Width = width;
}
if (height > 0)
{
newWindow.Height = height;
}
newWindow.VisibleStatusbar = false;
if (mode == 0)
{
{
}
//newWindow.OnClientClose = "OnChildWindowClosed";
newWindow.DestroyOnClose = true;
newWindow.InitialBehaviors = WindowBehaviors.Maximize;
}
RadWindowManager1.Windows.Add(newWindow);
}
Run Code Online (Sandbox Code Playgroud)
我想做的是:
点击我(page3.aspx)上的特定按钮时,关闭它及其父节点page2.aspx.
怎么做(服务器端)?
我试试这个:但它关闭了page3.aspx我想要关闭父母的孩子page2.aspx呢?!
protected void Button1_Click(object sender, EventArgs e)
{
((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();");
RadAjaxManager1.ResponseScripts.Add("CloseModal();");
}
Run Code Online (Sandbox Code Playgroud)
protected void Button1_Click(object sender, EventArgs e)
{
((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();");
RadAjaxManager1.ResponseScripts.Add("CloseModal();");
}
Run Code Online (Sandbox Code Playgroud)
如果CloseModal()事件正确触发,您应该能够window.close()在其中进行调用.RadWindows只存在于父窗口的上下文中,因此您仍然可以调用window.close()将关闭每个打开的窗口的窗口.
编辑:虽然有点偏离主题,Telerik的这个链接向您展示如何从RadWindow获取父窗口的句柄.然后,您可以调用close方法客户端关闭浏览器窗口(page1.aspx),该窗口将关闭所有后续RadWindows.
从这个链接:
RadWindow和浏览器弹出窗口的主要区别在于,就像任何其他DHTML元素一样,RadWindow仅存在于创建它的页面的上下文中.它不能离开浏览器窗口的边界.
小智 7
您可以通过实现每个父级的接口来执行冒泡事件.我试图说明我的想法.
public interface IClosingParent
{
void Close();
}
public class PageA : System.Web.Page, IClosingParent
{
public void IClosingParent.Close()
{
//Code to close it or hide it
}
}
public class PageB : System.Web.Page, ClosingParent
{
public void IClosingParent.Close()
{
((IClosingParent)this.Parent).Close();
//Code to close it or hide it
}
}
public class PageC : System.Web.Page
{
protected void ButtonClose_Click(object sender, EventArgs e)
{
((IClosingParent)this.Parent).Close();
//Code to close it or hide it
}
}
Run Code Online (Sandbox Code Playgroud)
这包括您必须将RadWindow声明为父级.所以在分层视图中,似乎是这样的:
PageA : IClosingParent
|
|-- PageB : IClosingParent
|
|-- PageC
|-- ButtonClose
我认为您可以使用此解决方案管理您想要的结束过程,并随时随地进行更改.
这可能听起来很土气,但为什么不简单地在关闭之前执行要运行的服务器代码,然后向客户端返回一个 bool 参数,允许其运行关闭窗口(客户端)的 if 语句?
PS:我在算法上思考,我对服务器端 C# 没有太多经验。
| 归档时间: |
|
| 查看次数: |
2312 次 |
| 最近记录: |