to samwcm(ROAM):你在那里看到这种说法的,最初我做的事index.htm文件,一样的无法到达to wangdequan1024(紫夜) :button事件肯定执行了,我单步执行察看,没有不执行的语句,而且我在另外一个项目的button下也是用Server.Transfer来转跳页面,没有问题的。还有我现在的项目里有两个页面,error.htm和log_error.htm文件,其中转跳error.htm部分可行,转跳到log_error.htm页面的全部不行
to to wangdequan1024(紫夜) :Server.Transfer如果带有false参数的话,当前页面的对答流(所有页面数据)将全部丢失,这样在服务器端进行的页面转移就与当前页面的初始化与否无关了退一步说,即便如你所想,为什么其他的页面就可以转至呢,receivemail.aspx是可以用Server.Transfer的,在button事件下。
to hell9999(没有美女陪伴得日子):我有try语句,但不在同一函数里,我单独给写了个函数有必要说明一下,我发现error.htm是在项目里建立的文件,可以使用 log_error.htm是添加现有项目的,是不是这样会导致异常呢??
to wangdequan1024(紫夜) :button事件肯定执行了,我单步执行察看,没有不执行的语句,而且我在另外一个项目的button下也是用Server.Transfer来转跳页面,没有问题的。还有我现在的项目里有两个页面,error.htm和log_error.htm文件,其中转跳error.htm部分可行,转跳到log_error.htm页面的全部不行 --------------------------------------------------------------- error.htm和log_error.htm这两页的跳转,你是怎么实现跳转的,有代码吗?.aspx的页面因为是在服务器端执行的,所有不管放在什么位置都是可以实现跳转的。
ms-help://MS.NETFrameworkSDKv1.1/cpref/html/frlrfsystemwebhttpserverutilityclasstransfertopic2.htm
Server.Transfer("receivemail.aspx");// .aspx
刚才也查了一些资料,我认为是这样的,也不知道对不对我们先看一下Server.Transfer(url,bool)的属性和功能
Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。
默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。
同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。
我的看法如下:
因为Page_Load是页面的初始化事件,把Server.Transfer放在该事件中执行,也就是说还没有对a.aspx页进行初始化就直接转到了index.html根本就没有与服务器端有任何联系,也就是说该页面上的任何服务器控件都没有进行初始化就转向了HTML客户端,在转向过程中服务器端未接到任何请求,所以是可以转向的。
而放在别的位置,由于页面初始化已经完毕,服务器端已经接到来自客户端的请求,而且该页面已经运行在服务器端,这时不管在什么位置调用Server.Transfer都会使a.aspx转向另外一页,这时问题就出来了,也就是说index.html是运行在客户端的,而Server.Transfer转向则是服务器端向服务器端的转向。(注意看一下上面对于Server.Transfer的说明有这么一条:因为重定向完全在服务器端进行)。这时就会报错。
不知道说的对不对,只是一个想法
把Server.Transfer("index.html",false);放到按钮事件得最后不要放在Catch 前面,放到后面试试
ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemWebHttpServerUtilityClassTransferTopic2.htmindex.htm也不行,传输到的页也应该是 .aspx 页。例如,传输到 .asp 或 .asmx 页是无效的。Transfer 调用 End,它在完成时引发 ThreadAbortException 异常。
log_error.htm是添加现有项目的,是不是这样会导致异常呢??
---------------------------------------------------------------
error.htm和log_error.htm这两页的跳转,你是怎么实现跳转的,有代码吗?.aspx的页面因为是在服务器端执行的,所有不管放在什么位置都是可以实现跳转的。
“我发现error.htm是在项目里建立的文件,可以使用log_error.htm是添加现有项目的”
这句话是什么意思?
代码如下:
try
{
...
//成功则
server.transfer("index.html");
}
cacth
{
server.transfer("error.htm");
}----------------------------------------------------if(Session["username"]==null)
server.transfer("log_error.htm");//没有权限使用这个页面我在很多页面都用了写代码,其中server.transfer("error.htm")在有些页面可以
server.transfer("index.html")则肯定不行,改成response.redirect("index.htm")就ok了
只有有文件,哪怕是没有后缀名,只有地址对了,ie也会正确的现实出来
如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。
默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。
同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。