【问题标题】:Closing RadWindow by invoking javascript from server通过从服务器调用 javascript 来关闭 RadWindow
【发布时间】:2011-12-07 03:19:14
【问题描述】:

我有一个如下所示的控件:

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

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

【问题讨论】:

    标签: javascript asp.net ajax telerik radwindow


    【解决方案1】:

    我不确定我是否在改进这个答案,我只是想让它更容易理解。我有一个从主页打开的 rad 窗口。 radwindow 是在代码隐藏 (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();");

    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>
    

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

    谢谢

    【讨论】:

      【解决方案2】:

      什么是“自我”?你不是说“这个”吗?

      您是尝试从窗口内部还是从启动窗口的页面关闭 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。

      【讨论】:

      • self = 据我所知,javascript 中的窗口。我试图从窗口内关闭。发布的代码成功了。可悲的是,我想我已经在 Telerik 的网站上看到过这个帖子,但认为它只适用于 Control。无论如何,感谢您的发帖!
      【解决方案3】:

      我很确定我以前遇到过这个问题,我认为这解决了它:

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

      如果这不起作用,试试这个:

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

      如果您愿意,也可以这样做:

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

      【讨论】:

      • 感谢您的回复。我曾考虑过做某种睡眠,但这确实是最后的手段。这也意味着我还没有了解到为什么这两个实现的行为不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多