2013-04-18 45 views
0

编程方式打开一个弹出窗口,我有以下代码:C# - 在浏览器中

if (function.Equals("PopUp")) 
      { 
       Request req = new Request(); 
       string result = req.doRequest("function=" + function + "&num=" + trans_number, "http://localhost:4000/Handler.ashx"); 

       if (result.Equals("True") || result.Equals("true")) 
       { 
        Page.ClientScript.RegisterStartupScript(Page.GetType(), null, "window.open('http://localhost:4000/Transaction_Number.aspx', '_newtab')", true); 
       } 

       Session["result"] = result; 
       Response.Redirect("Results.aspx"); 
      } 

这段代码的请求到服务器,如果结果是真实的,它应该创建一个新的标签,以及将当前窗口重定向到Results.aspx。

如果结果为false,则应该只重定向到Results.aspx。

此代码的主要问题是,即使结果为真,也不会创建新选项卡。但是,如果我注释掉除新标签代码之外的所有代码,则会创建新标签。

这是怎么发生的?我该如何纠正它?

回答

2

问题似乎是,您的脚本可以执行前重定向。我会尝试在脚本中进行重定向,所以像这样;

if (function.Equals("PopUp")) 
{ 
    Request req = new Request(); 
    string result = req.doRequest("function=" + function + "&num=" + trans_number, "http://localhost:4000/Handler.ashx"); 

    if (result.Equals("True") || result.Equals("true")) 
    { 
     Page.ClientScript.RegisterStartupScript(Page.GetType(), null, "window.open('http://localhost:4000/Transaction_Number.aspx', '_newtab')", true); 
    } 

    Session["result"] = result; 

    Page.ClientScript.RegisterStartupScript(Page.GetType(), null, "window.location.href = 'http://localhost:4000/Redirect.aspx.aspx'", true); 
} 
+0

谢谢:)这工作完美:) – Matthew

0

结果不一定与您测试的结果相匹配。

String.Equals()可能并不总是与给定的字符串匹配,因为有时候如果字符串已被禁用,引用可能不匹配。

我建议切换到使用String.Compare()或更好,但只是使用等于运算符:==

所以:

if (result == "True" || result == "true") 
{ 
    Page.ClientScript.RegisterStartupScript(Page.GetType(), null, "window.open('http://localhost:4000/Transaction_Number.aspx', '_newtab')", true); 
} 

或者更好的是:

if (Convert.ToBoolean(result)) 
{ 
    Page.ClientScript.RegisterStartupScript(Page.GetType(), null, "window.open('http://localhost:4000/Transaction_Number.aspx', '_newtab')", true); 
} 

MSDN有一些具体的指导方针如何有效比较字符串:

http://msdn.microsoft.com/en-gb/library/vstudio/cc165449.aspx