2010-04-02 120 views
1

所以这里是我的基本问题。我可以延迟window.open()吗?

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

我只是需要一种方法,直到内容已被保存,才能打开窗口。现在它立即打开一个新窗口,内容还没有全部保存。

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

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); 
} 
+1

我会远离使用window.open()。还有其他更方便用户的选择。 – 2010-04-02 19:01:58

回答

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

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

+0

这不会由用户操作启动,因此可能会被弹出式窗口拦截器阻止。 – spender 2010-04-02 18:26:22

4

您的AJAX调用允许您有一个完成回调,当服务器回复时会执行回调。

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

但是,要小心弹出式窗口拦截器。

+0

+1弹出窗口阻止程序 – spender 2010-04-02 18:26:43

+0

我看到你在做什么,但我试图从updatepanel做到这一点。 – MisterIsaak 2010-04-05 16:50:23

0

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

3

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

2

ajax完成后使用回调将数据库内容加载到MODAL窗口中。

使用jQuery瓦特/ facebox插件的例子:

$("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; 
}); 

我只是想指出,你应该添加一个错误回调到上面的代码片段。你也应该防止多个表单提交。

相关问题