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, "没有选择任何数据");
}
这段代码呢?有什么办法能阻止?
Response.Redirect(string.Format("Resource.aspx?setp={0}", Convert.ToInt32(Request.QueryString["setp"]) + 1),true);
问题就是返回去之后还执行判断是否有选择数据的代码
Page_OnLoad()
{
if(!IsPostBack)
{
//代码
}
}
{
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));
}
从页面B重新返回页面A时,页面A重载,重载后导致 sb.Length>0不再成立。建议在Page_OnLoad()中加入如下代码:
{
if(!IsPostBack)
{
//代码
}
}
可以这样if (sb.Length > 0)
{
Session["orderCust"] = sb.ToString().TrimEnd('|');
Response.Redirect(string.Format("Resource.aspx?setp={0}", Convert.ToInt32(Request.QueryString["setp"]) + 1));
Return;
}看看是否跳转
选择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存储状态标识也不行~~