【问题标题】:how to close radwindow in asp.net?如何在 asp.net 中关闭 radwindow?
【发布时间】:2026-02-16 07:10:02
【问题描述】:

我是一个使用 ASP.NET 控制器来显示用户详细信息。当RadWindow 打开并且我尝试使用 Close 按钮关闭时。但问题是,在页面加载并回发后,它会一次又一次地打开。我在页面上有多个选项:新建、保存、打印等搜索。

<telerik:RadWindow ID="rwReport" runat="server" Behaviors="Close" KeepInScreenBounds="true"
                        AutoSize="true" VisibleOnPageLoad="false" Modal="true" Title="Report ACMI Advance Payment"
                        DestroyOnClose="true">
                        <ContentTemplate>
                            <ucRPV:ReportViewer id="ucReportViewer" runat="server" />
                        </ContentTemplate>
                    </telerik:RadWindow>

cs file code
 private void Print() 
        {
            try
            {
               // this.sADPs.DisplayReport();
                Hashtable reportParameters = new Hashtable();

                reportParameters.Add("DataSourceName", "dsACMIAdvancePayment");
                reportParameters.Add("reportName", "rptACMIAdvancePayment.rdlc");
                reportParameters.Add("Id", this.hfId.Value.ToString().ConvertTo<long>());

                this.ucReportViewer.clearReport();
                this.ucReportViewer.showReport(reportParameters);
                this.rwReport.VisibleOnPageLoad = true;

                //showReport(reportParameters);

            }
            catch(Exception e) 
            {
                throw e;
            }                      
        }

ASPX 代码:

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="AjaxControlToolkit" %>
<%@ Register Src="../Reports/rpvReportViewerPopup.ascx" TagName="ReportViewer" TagPrefix="ucRPV" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%@ Register Src="../Common/UserControls/ToolBarActions.ascx" TagName="ToolBarActions" TagPrefix="ucTBA" %>
        </td>

【问题讨论】:

  • 无论如何,下面的解决方案对你有用吗?

标签: c# asp.net telerik


【解决方案1】:

不要使用 VisibleOnPageLoad 属性来显示 RadWindow,注册一个将调用其 show() 方法的脚本。因此,后续回发不会导致它自行显示:http://www.telerik.com/help/aspnet-ajax/window-troubleshooting-opening-from-server.html

当然,防止表单按照 Felice 的建议重新提交是另一件可能还需要做的事情。

将其翻译成代码:

代替:

this.rwReport.VisibleOnPageLoad = true;

使用:

string script = "function f(){$find(\"" + rwReport.ClientID + "\").show(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", script, true);

【讨论】:

    【解决方案2】:

    您可以尝试以下代码:这可能会有所帮助-

    <telerik:RadScriptBlock runat="server" ID="scriptBlock">
    
        <script type="text/javascript">
            //<![CDATA[
            function GetRadWindow() {
                var oWindow = null;
                if (window.radWindow) oWindow = window.radWindow;
                else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
                return oWindow;
            }
            function CloseWin() {
                //Get the RadWindow  
                var oWindow = GetRadWindow();
                //Call its Close() method
                if (oWindow) {
                    oWindow.Close();
                }
                return false;
            }
     </script>
     </telerik:RadScriptBlock>
    

    并在Page:yourpage.aspx;...调用按钮的onClientClick函数:

    <asp:Button ID="btnClose" Text="Close" runat="server" CssClass="button" Enabled="true" OnClientClick="CloseWin();" />
    

    【讨论】:

    • 这里是我的 aspx 页面
    • 亲爱的@user3725613,不要在评论中添加代码,而是自己编辑你的问题。
    • 你试过这个答案,它有效吗?接受它让我知道!
    【解决方案3】:

    当您重新加载页面时,我遇到了同样的问题,因为浏览器重新发送信息并且 radwindow 再次打开。为了避免这种行为,我采用了以下解决方案:

    添加一个隐藏文件来保存客户端代码:

    <asp:HiddenField runat="server" ID="_repostcheckcode" />
    

    在代码页中添加以下代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        CancelUnexpectedRePost();
    }
    
    private void CancelUnexpectedRePost()
    {
        string clientCode = _repostcheckcode.Value;
    
        //Get Server Code from session (Or Empty if null)
        string serverCode = Session["_repostcheckcode"] as string  ?? "";
    
        if (!IsPostBack || clientCode.Equals(serverCode))
        {
            //Codes are equals - The action was initiated by the user
            //Save new code (Can use simple counter instead Guid)
            string code = Guid.NewGuid().ToString();  
            _repostcheckcode.Value = code;
            Session["_repostcheckcode"] = code;
        }
        else
        {
            //Unexpected action - caused by F5 (Refresh) button
            Response.Redirect(Request.Url.AbsoluteUri);
        }
    }
    

    原文可以在here找到。

    【讨论】:

      【解决方案4】:

      使用以下代码添加带有OnClick 处理程序的Button

          protected void CloseRadWindow(object sender, EventArgs e)
          {
              rwReport.VisibleOnPageLoad = false;
          }
      

      【讨论】: