我可以延迟window.open()吗?

时间:2010-04-02 18:22:43

标签: asp.net javascript ajax updatepanel

所以这是我的基本问题。

用户点击保存按钮 使用Ajax通过代码隐藏保存内容 然后打开一个新窗口,加载来自数据库的内容。

我只需要一种方法,在内容保存之前不要打开窗口。现在它立即打开一个新窗口,但内容尚未全部保存。

有什么想法吗?

编辑:
对不起,我想我应该更清楚了。我正在使用asp.net更新面板,我点击的按钮触发更新面板将一些信息保存到数据库,然后我想打开一个“预览”这个新数据的新窗口。所以这就是我所拥有的并且不会破坏,但也不会打开一个新窗口。

protected void lnkPreview_Click(object sender, System.EventArgs e)
{
      temp1 control = UpdatePanel1.ContentTemplateContainer.FindControl("template") as temp1;
      control.saveContent();

      string script = "<script language='javascript'>window.open('/preview.aspx', '_blank');</script>";
      this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(),"ClientScriptStuff", script);
}

6 个答案:

答案 0 :(得分:4)

您的AJAX调用允许您进行完成回调,该回调将在服务器回复时执行。

您需要在那里拨打window.open 有关详细信息,请向我们展示您的代码。

但是,请注意弹出窗口拦截器。

答案 1 :(得分:3)

我会考虑在用户操作后立即打开一个空白/替代内容窗口,然后在回调完成时设置窗口位置。通过这种方式,您应该对弹出窗口阻止更加免疫。

答案 2 :(得分:2)

在ajax完成后使用回调将db内容加载到MODAL窗口中。

使用带有facebox插件的jQuery的示例:

$("form").submit(function(){
    var form = $(this);
    $.ajax({
        "url" : form.attr("action")||document.location.toString(),
        "type" : form.attr("method")||"get",
        "data" : form.serialize(),
        "success" : function(data){
            $.facebox({"ajax" : "popupwindowURL.htm?data="+data});
        }
    });
    return false;
});

我只想注意您应该在上面的代码段中添加错误回调。而且你还应该阻止多个表单提交。

答案 3 :(得分:0)

将window.open()函数设置为AJAX结果的回调函数。

答案 4 :(得分:0)

使用Ajax方法获取保存的响应,并在收到保存确认后触发window.open。

答案 5 :(得分:0)

protected void lnkPreview_Click(object sender, System.EventArgs e)
{
         //Save the page content

         //Open a page to preview the changes
         ScriptManager.RegisterClientScriptBlock(UpdatePanelName, typeof(Page), "previewPage", "window.open('/preview.aspx');", true);
 }