C# - 页面重定向无法正常工作

时间:2013-04-18 15:56:41

标签: c# asp.net redirect tabs window

我在C#中有以下代码:

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

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

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

       if(result.Equals("Error") || result.Equals("error"))
       {
             Page.ClientScript.RegisterStartupScript(Page.GetType(), null, "window.open('http://localhost:4000/ErrorPage.htm', '_newtab')", true);
       }

       Session["result"] = result;
       Page.ClientScript.RegisterStartupScript(Page.GetType(), null, "window.location.href = 'Results.aspx'", true);
}

结果变量可以包含三个值中的任何一个(如果服务器响应):

我是真的 ii)错误 iii)错误

此代码的主要问题是三个if语句中的每个语句中的新选项卡脚本都能正常工作。但是,打开Results.aspx页面的最后一个脚本由于某种原因而未执行。如果所有其他代码都被注释掉,那么脚本编写得很好。我该如何解决这个问题?

我尝试用Response.Redirect(“Results.aspx”)替换它,然后这个exeuctes和所有其他三个脚本永远不会执行。

1 个答案:

答案 0 :(得分:1)

您应该立即注册这些内容,而不是两个单独的声明:

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

      string scriptVal = "";

      if (result.Equals("True") || result.Equals("true"))
      {
            scriptVal = "window.open('http://localhost:4000/Larger.aspx?num=" + number + "', '_newtab');";
       }

       if(result.Equals("False") || result.Equals("false"))
       {
            scriptVal = "window.open('http://localhost:4000/Smaller.aspx', '_newtab');";
       }

       if(result.Equals("Error") || result.Equals("error"))
       {
            scriptVal = "window.open('http://localhost:4000/ErrorPage.htm', '_newtab');";
       }

       Session["result"] = result;

       scriptVal += "window.location.href = 'Results.aspx';";

       Page.ClientScript.RegisterStartupScript(Page.GetType(), null, scriptVal, true);
}

请参阅ClientScriptManager.RegisterStartupScript上的文档,具体为:

  

启动脚本由其密钥及其类型唯一标识。   具有相同密钥和类型的脚本被视为重复。只有一个   具有给定类型和密钥对的脚本可以在页面中注册。   尝试注册已注册的脚本不会   创建脚本的副本。

在您的情况下,您注册的两个脚本中的类型和键都相同。

您可以使用密钥唯一地标识它们,然后单独注册它们。但是你必须记住,执行的顺序并不能保证:

  

不保证脚本块按其顺序输出   已注册。