2011-10-13 27 views
3

关闭RadWindow通过调用JavaScript的我有一个控制,看起来像这样:从服务器

<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> 

代码隐藏最终调用此之后,数据库的工作完成:

ClientScript.RegisterStartupScript(GetType(), "Key", "closeWindow();", true); 

我打我的断点在closeWindow函数,但它没有相同的行为(窗口实际上并不关闭)。我尝试了各种迭代,如:

ClientScript.RegisterStartupScript(GetType(), "Key", "$(document).ready(function() {return closeWindow();});", true); 

无济于事。我错过了什么?

回答

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。

+0

自我=在JavaScript的窗口,据我所知。我试图从窗口内关闭。代码发布了。可悲的是,我想我已经在Telerik的网站上看到过这一点,但认为它只适用于Control。无论如何,感谢发布! – kmkemp

0

我敢肯定,我以前碰到这个问题,我觉得这个固定:

setTimeout("self.close()", 1000); 

如果不行,试试这个:

setTimeout("self.focus()", 500); //adjust the timeout as needed 
setTimeout("self.close()", 1000); 

你也可以这样来做,如果你宁愿:

setTimeout(function(){ 
    self.close(); 
}, 1000); 
+0

感谢您的回复。我曾考虑过做某种睡眠,但这真的是最后的手段。这也意味着我还没有学到任何有关为什么这两个实现的行为有所不同。 – kmkemp

0

我不确定如果我正在改进这个答案,我只是想让它更容易理解。我有一个从主页面打开的弧形窗口。 Radwindow在Code Behind(C#)中打开,而不是Javascript。当我的用户点击RadWindow上的Save按钮时,它执行一些逻辑任务,然后关闭Radwindow本身。你只需要:

将thise代码块你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> 

这应该工作,如果我犯了一个错误,请纠正我。

谢谢