1

我有一个 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 的方法,但没有一个成功。你能告诉我如何关闭这个窗口吗?

4

3 回答 3

1

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

关闭窗口

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

调用的关闭操作在哪里?

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

如果“顺利”的确定只能在服务器上完成,那么您正在查看 Ajax 或整页刷新。

或者,如果有一种方法可以在客户端做出决定,那么您根本不需要回到后端。只需使用 js 关闭颜色框窗口即可。

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

于 2012-09-19T00:57:52.037 回答
0

问题接缝以这种方式解决:

    Page.ClientScript.RegisterStartupScript(GetType(), 
        "CloseKey", "parent.$.colorbox.close();", true);
于 2012-09-18T20:22:14.010 回答
0

使用带有 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");
    });

我确定您在提交对话框中需要更多代码,但这是一般的想法。

于 2012-09-18T20:32:42.913 回答