日期:2014-05-19  浏览次数:20454 次

奇怪的现象,关于Response.Redirect()为何不能正确跳转?
在系统登陆界面中Response.Redirect()函数出现奇怪的现象。

开始时,系统未连接数据库,本人用XML形式测试代码,如下:
XmlDocument   doc   =   new   XmlDocument();
doc.Load(HttpContext.Current.Server.MapPath( " ")   +   @ "\database.xml ");
XmlElement   root   =   doc.DocumentElement;
foreach   (XmlNode   node   in   root.ChildNodes)
{
      if   (Login1.UserName   ==   node.Attributes[ "name "].Value   &&   Login1.Password   ==   node.Attributes[ "pwd "].Value)
      {
            Session[ "userName "]   =   Login1.UserName;
            Session[ "authority "]   =   node.Attributes[ "authority "].Value;
            Response.Redirect(Login1.DestinationPageUrl,   true);     //验证成功,xml测试时成功跳转
      }
}
Response.Redirect( "Default.aspx ");     //身份验证未通过,跳转到原页面

其中的database.xml中包含了登陆用户,Login1.DestinationPageUrl属性包含了身份验证通过后的主页面Main.aspx。
Response.Redirect(Login1.DestinationPageUrl,   true);
如果对Response.Redirect()进行try...catch...出现ThreadAbortException异常,这是正常线程结束异常,无关紧要。

后来,系统连接到数据库后的代码如下:
string   userID   =   Login1.UserName.Trim();
string   password   =   Login1.Password.Trim();
string   strSelect   =   "select   OperatorID,OperatorPass,OperatorName,OperatorType,FieldCode   from   pb_Operator   where   OperatorID= ' "   +   userID   +   " '   and   OperatorPass= ' "   +   password   +   " ' ";     //数据库查询字符串
SqlDataReader   reader   =   dbManager.GetDataReader(strSelect);
if   (reader.Read())     //数据库查询通过
{
      //保存到Session
      Session[ "OperatorID "]   =   reader[ "OperatorID "];   //帐号
      Session[ "OperatorName "]   =   reader[ "OperatorName "];       //姓名
      Session[ "OperatorType "]   =   reader[ "OperatorType "];       //操作员类型
      Session[ "FieldCode "]   =   reader[ "FieldCode "];     //所属域编号
      Response.Redirect(Login1.DestinationPageUrl,   true);     //系统也成功运行到这里,但是却跳转到原页面Default.aspx,而不是指定的Main.aspx页面。这是为什么?
}
Response.Redirect( "Default.aspx ");

数据库连接成功,并且也成功读取了用户数据并保存到Session变量中。但是到了Response.Redirect(Login1.DestinationPageUrl,   true);后却不进行页面跳转(页面也进行了跳转,但是却跳转到Default.aspx,而不是指定的Main.aspx),还是在原来的Default.aspx登陆页面。进行try...catch...出现同样的ThreadAbortException异常。

如此这般,就是改变Login1.DestinationPageUrl的跳转页面值,也还是回到原来的Default.aspx页面,甚至在跳转页面值指向其他文件夹中的页面如xxx\xxx.aspx,系统会跳出xxx\Default.aspx页面不存在的错误。
也就是说,好像系统绑定了Default.aspx似的。因此,我在清空了系统Frame文件夹下的临时文件。原以为总不会出现了,但是还是出现一直Default.aspx的现象。

我都快被逼疯了,高手来救救我吧。

------解决方案--------------------
设置断点一步步跟踪,察看到底错误在什么地方
可能根本就没有执行到Response.Redirect
------解决方案--------------------
if (reader.Read()) //数据库查询通过
{
//保存到Session
Session[ "OperatorID "] = reader[ "OperatorID "]; //帐号
Session[ "OperatorName "] = reader[ "OperatorName "]; //姓名