我有一个看起来像这样的控件:
<telerik:RadCodeBlock runat="server">
<script type="text/javascript">
function refresh() {
window.$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("RebindRecommendations");
}
</script>
</telerik:RadCodeBlock>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="AjaxRequest">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="NameOfGrid" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server">
<Windows>
<telerik:RadWindow ID="RadWindow1" runat="server" NavigateUrl="UrlOfPage" OnClientClose="refresh"></telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
页:
<script type="text/javascript">
function closeWindow() {
self.close();
return false;
}
</script>
<!-- form fields here -->
<telerik:RadButton runat="server" ID="_cancel" Text="Cancel" OnClientClick="closeWindow"></telerik:RadButton>
<telerik:RadButton runat="server" ID="_submit" Text="Submit" OnClientClick="closeWindow" OnClick="DoSomeDataBaseStuff"></telerik:RadButton>
这是按预期工作的。我的RadWindow被删除,我的控件的网格在点击取消或提交按钮时刷新。问题是数据库到那时还没有完成其工作,因此网格刷新不会显示更改。我试图将我的页面实现切换为如下所示:
页:
<script type="text/javascript">
function closeWindow() {
self.close();
return false;
}
</script>
<!-- form fields here -->
<telerik:RadButton runat="server" ID="_cancel" Text="Cancel" OnClick="CallJavaScriptToKillWindow"></telerik:RadButton>
<telerik:RadButton runat="server" ID="_submit" Text="Submit" OnClick="DoSomeDataBaseStuffAndThenCallJavaScriptToKillWindow"></telerik:RadButton>
Code Behind最终在数据库工作完成后调用它:
ClientScript.RegisterStartupScript(GetType(), "Key", "closeWindow();", true);
我在closeWindow函数中点击了断点,但它没有相同的行为(窗口实际上没有关闭)。我尝试了各种迭代,如:
ClientScript.RegisterStartupScript(GetType(), "Key", "$(document).ready(function() {return closeWindow();});", true);
无济于事。我错过了什么?
答案 0 :(得分:6)
什么是'自我'?你不是说'这个'吗?
您是尝试从窗口内部还是从启动窗口的页面关闭RadWindow?
从窗口内部,我通常会这样做:
function GetRadWindow()
{
var oWindow = null;
if (window.radWindow)
oWindow = window.radWindow;
else if (window.frameElement.radWindow)
oWindow = window.frameElement.radWindow;
return oWindow;
}
function Close()
{
var oWindow = GetRadWindow();
oWindow.argument = null;
oWindow.close();
return false;
}
另外,我使用ScriptManager.RegisterStartupScript而不是ClientScript。
答案 1 :(得分:0)
我很确定我之前遇到过这个问题,我认为这解决了这个问题:
setTimeout("self.close()", 1000);
如果这不起作用,请尝试:
setTimeout("self.focus()", 500); //adjust the timeout as needed
setTimeout("self.close()", 1000);
如果您愿意,也可以这样做:
setTimeout(function(){
self.close();
}, 1000);
答案 2 :(得分:0)
我不确定我是否正在改进这个答案,我只是想让它更容易理解。我有一个从主页打开的rad窗口。 radwindow在Code Behind(C#)中打开,而不是Javascript。当我的用户单击RadWindow上的Save按钮时,它会执行一些逻辑任务,然后关闭radwindow本身。你只需要:
将此代码块放入RadWindow aspx .....
<telerik:RadCodeBlock runat="server" ID="rcb1">
<script language="javascript" type="text/javascript">
function GetRadWindow()
{
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
return oWindow;
}
function CloseDialog(button)
{
GetRadWindow().close();
}
</script>
</telerik:RadCodeBlock>
执行预关闭逻辑后,将此代码放入RadWindow的按钮单击(执行其他逻辑的同一按钮关闭窗口)
C# ClientScript.RegisterStartupScript(typeof(string),“”,“CloseDialog();”);
OR
VB ClientScript.RegisterStartupScript(Me.GetType(),“”,“CloseDialog();”)
如果你想知道如何从代码隐藏中打开radwindow,我就是这样做的:
RadWindow window1 = new RadWindow();
// Set the window properties
window1.NavigateUrl = "winStrengthChart.aspx?EMPLOYIDNAME=" + parmString;
window1.ID = "RadWindow1";
window1.Width = 800;
window1.Height = 650;
window1.VisibleStatusbar = false;
window1.Behaviors = Telerik.Web.UI.WindowBehaviors.Close | Telerik.Web.UI.WindowBehaviors.Resize | Telerik.Web.UI.WindowBehaviors.Move;
window1.VisibleOnPageLoad = true; // Set this property to True for showing window from code
rwm1.Windows.Add(window1);
this.Form1.Controls.Add(window1);
...当然,您需要在主页面上打开窗口的基本RadWindowManager:
<telerik:RadWindowManager ID="rwm1" runat="server">
<Windows>
</Windows>
</telerik:RadWindowManager>
如果我犯了错误,这应该有用,请纠正我。
由于