读书人

奇怪的现象关于Response.Redirect()

发布时间: 2012-01-08 22:48:50 作者: rapoo

奇怪的现象,关于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 "]; //姓名
Session[ "OperatorType "] = reader[ "OperatorType "]; //操作员类型


Session[ "FieldCode "] = reader[ "FieldCode "]; //所属域编号
Response.Redirect(Login1.DestinationPageUrl, true); //系统也成功运行到这里,但是却跳转到原页面Default.aspx,而不是指定的Main.aspx页面。这是为什么?
}
else
{
Response.Redirect( "Default.aspx ");
}

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070212

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
[解决办法]
这个是这样的 要解决很简单啊
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页面。这是为什么?
}
else
{
Response.Redirect( "Default.aspx ");
}

[解决办法]
写else,或者在第一个Redirect后边写上return。

尽管你会说这个return永远执行不到,但是此时不关心是否执行不到,而是关心代码的形式(而不是靠异常控制方面)上不易读逻辑。
[解决办法]
在webconfig配置文件里面 有个参数要指定 就是指定异常捕获跳转处理项 具体是哪个忘了 你自己在里面去找下 系统默认就是Default.aspx
[解决办法]
跟踪下看:Login1.DestinationPageUrl里有值么?
是不是因为什么条件跳转了?

读书人网 >asp.net

热点推荐