【问题标题】:Closing jquery modal window conditionally from ASP.net code-behind从 ASP.net 代码隐藏有条件地关闭 jquery 模式窗口
【发布时间】:2012-09-19 08:57:52
【问题描述】:

我有一个 ASP.net 页面,其中包含打开基于 jquery 的模式窗口(使用 colobox jquery 插件)的链接。该窗口的内容从另一个 aspx 文件加载(它加载一个 iframe)。当用户按下 asp:button 并且我的代码隐藏中的某些条件运行良好时,我想关闭该窗口。

我尝试了很多方法来从代码隐藏中关闭该窗口,如下所示:

Page.RegisterStartupScript("X", @"$(this).dialog('close');");

Page.RegisterStartupScript("X", @"var win = window.open('','_self'); win.close();");

btnDone.Attributes.Add("onclick", @"var win = window.open('','_self'); win.close();");

btnDone.Attributes.Add("onclick", @"window.open('../px/nsk.aspx', '_self', null); window.close(); ");

System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE='JavaScript'>");
            System.Web.HttpContext.Current.Response.Write("self.close();");
            System.Web.HttpContext.Current.Response.Write("</SCRIPT>");

但是他们都不能关闭那个模态窗口。我正在测试最新版本的 Firefox。 后面的代码可以是这样的:

    // do some database works
if (condition)
{
   // close this modal window
}

我也尝试了 jquery 的方法,但都没有成功。 你能告诉我如何关闭这个窗口吗?

【问题讨论】:

    标签: javascript jquery asp.net colorbox


    【解决方案1】:

    给出的其他答案提供了细节;这个“答案”试图更具概念性/咨询性。

    关闭窗口

    关闭彩盒窗口是在客户端完成的。 @KennyZ 和 @Farshid 都提供了有关如何执行此操作的详细信息。默认情况下,ColorBox 将在按下 ESC 或其 EXIT ui 元素(如果使用)时关闭。也可以通过编程方式关闭该框,这听起来像是您需要做的。

    调用的关闭操作在哪里?

    @KennyZ 提出了一个 Ajax 调用来确定“我的代码隐藏中的某些条件是否顺利”;假设您不能容忍整页刷新(这对我来说似乎很合理),但这是您自己决定的事情。

    如果“顺利”的判断只能在服务器上完成,那么你看的是Ajax还是整页刷新。

    或者,如果有办法在客户端做出决定,您根本不需要回到后端。只需使用 js 关闭彩盒窗口即可。

    如果您可以提供有关控制关闭/不关闭 ColorBox 窗口的操作的更多详细信息,也许社区可以提供更多帮助。

    【讨论】:

      【解决方案2】:

      问题接缝要这样解决:

          Page.ClientScript.RegisterStartupScript(GetType(), 
              "CloseKey", "parent.$.colorbox.close();", true);
      

      【讨论】:

        【解决方案3】:

        使用带有 div 而不是 iframe 的 jQuery 对话框。

        然后您可以使用 Ajax 发布来运行服务器端代码并​​查看结果以决定如何处理对话框。

        声明对话框:

            $(document).ready(function () {
                jQuery("#MyDialog").dialog(
                    {
                        bgiframe: true,
                        autoOpen: false,
                        modal: true,
                        width: 800,
                        position: ['center', 100]
                    }
                );
            });
        

        填充对话框并打开它:

            $('#OpenMyDialog').click(function () {
                $.post($('url_for_dialog_contents'), function (data) {
                    $("#MyDialog").empty();
                    $("#MyDialog").append(data);
                }, null, "html");
                $('#MyDialog').dialog('open');
                return false;
            });
        

        提交对话框:

            $('#SubmitMyDialog').click(function () {
                $.post($('url_for_dialog_action'), function (data) {
                    if (data.success == true) { $('#MyDialog').dialog('close'); }
                }, null, "json");
            });
        

        我确信您需要在提交对话框中添加更多代码,但这是大体思路。

        【讨论】:

        • 亲爱的肯尼,谢谢,但您的解决方案需要我更改所有内容。我不想让我的父页面比现在更重。不过感谢您的替代解决方案。
        猜你喜欢
        • 2015-08-13
        • 1970-01-01
        • 2014-05-14
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        相关资源
        最近更新 更多