if (sb.Length > 0)
        {
            Session["orderCust"] = sb.ToString().TrimEnd('|');
            Response.Redirect(string.Format("Resource.aspx?setp={0}", Convert.ToInt32(Request.QueryString["setp"]) + 1));
        }
        else
        {
            if (!isSelected)
            {
                new AlterMessage().showMsg(this.Page, "没有选择任何数据");
            }
        }
上面这段代码是在页面A执行的,执行到Response.Redirect的时候跳转到页面B,在页面B有一个按钮,执行脚本history.back()返回页面A,为什么程序还会继续执行
if (!isSelected)
            {
                new AlterMessage().showMsg(this.Page, "没有选择任何数据");
            }
这段代码呢?有什么办法能阻止?

解决方案 »

  1.   

    try
    Response.Redirect(string.Format("Resource.aspx?setp={0}", Convert.ToInt32(Request.QueryString["setp"]) + 1),true);
      

  2.   

    或者将Response.Redirect(string.Format("Resource.aspx?setp={0}", Convert.ToInt32(Request.QueryString["setp"]) + 1));改为Response.Write(string.Format("<script>location.href='Resource.aspx?setp={0}';", Convert.ToInt32(Request.QueryString["setp"]) + 1));
      

  3.   

    应该为:Response.Write(string.Format("<script>location.href='Resource.aspx?setp={0}';</script>", Convert.ToInt32(Request.QueryString["setp"]) + 1));
      

  4.   

    整个流程是进入页面A之后显示一个gridview,如果没有选择数据就点击提交按钮,就会提示"没有选择任何数据",如果选择了数据,就跳转到页面B,页面B是执行的另外的程序,本身是不接受页面A的任何数据的,只是它有一个按钮可以重新返回页面A去选择数据
    问题就是返回去之后还执行判断是否有选择数据的代码
      

  5.   


    Page_OnLoad()
    {
       if(!IsPostBack)
       {
          //代码
       }
    }
      

  6.   

    这个按钮是不是用JS实现的?用history.go(-1)?
      

  7.   

    slightly change your code flow as following:       if (sb.Length = 0)
            {
    if (!isSelected)
                {
                    new AlterMessage().showMsg(this.Page, "没有选择任何数据");
                }            
            }
            else
            {
                Session["orderCust"] = sb.ToString().TrimEnd('|');
                Response.Redirect(string.Format("Resource.aspx?setp={0}", Convert.ToInt32(Request.QueryString["setp"]) + 1));
            }
      

  8.   

    在A页面通过session记录选择标志和选择数据,再跳转到B页面。在B页面返回A页面后,判断标识
      

  9.   


    从页面B重新返回页面A时,页面A重载,重载后导致 sb.Length>0不再成立。建议在Page_OnLoad()中加入如下代码: 

      if(!IsPostBack) 
      { 
          //代码 
      } 
    }
      

  10.   

    调试下看看是什么原因
    可以这样if (sb.Length > 0)
            {
                Session["orderCust"] = sb.ToString().TrimEnd('|');
                Response.Redirect(string.Format("Resource.aspx?setp={0}", Convert.ToInt32(Request.QueryString["setp"]) + 1));
                Return;
            }看看是否跳转
      

  11.   

    将JS代码history.back改成C#代码Response.Redirect
      

  12.   

    你返回的时候sb这个变量肯定是空值了吧,你最好是把sb做为一个参数从A页面传到B页面去,这样返回时参数会带回来,当sb这个变量就有值就正常执行了
      

  13.   

    "sb"放到一个Session里面看看,
      

  14.   

    history.back和history.go(1)都不应该执行回跳页面的服务器端事件的。感觉不应该出这种问题啊?要不你在详细描述一下
      

  15.   

    如果不用history.back改用Response.Redirect就可以解决,但是问题是整个框架架构都是已经固定好了的,不能改动~~A页面主要是呈现数据
    选择A页面的数据之后点击提交按钮,就会触发事件,里面的执行代码如下:System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    bool isSelected = false;
                    foreach (GridViewRow gvr in gdvDataInfor.Rows)
                    {
                        if (((CheckBox)gvr.FindControl("ckbSelected")).Checked)
                        {
                            sb.Append(((HyperLink)gvr.Cells[1].Controls[0]).Text + "$");
                            sb.Append(((Label)gvr.FindControl("lblCustNo")).Text + "|");
                        }
                    }
                    if (sb.Length > 0)
                    {
                        Session["OrderCust"] = sb.ToString().TrimEnd('|');
                        Response.Redirect(string.Format("OpinionInfo.aspx?mode=1&setp={0}", Request.QueryString["setp"]), false);
                    }
                    else
                    {
                        if (!isSelected)
                        {
                            new AlterMessage().showMsg(this.Page, "没有选择任何数据!");
                        }
                    }如果有勾选数据的话就跳转到B页面,在B页面主要处理Session["OrderCust"],但是也可以不处理转而点击返回按钮回到A页面,这个时候它不知道为什么就会执行                    if (!isSelected)
                        {
                            new AlterMessage().showMsg(this.Page, "没有选择任何数据!");
                        }这段代码我也调试过,断点根本没有执行到这里,但是它偏偏就会弹出对话框来,我改成用Session存储状态标识也不行~~