本帖最后由 Star 于 2010-12-16 19:53 编辑
$ B- C5 M& ?3 }$ \8 {# P3 f% B- P l$ ?" i# O: s9 _# d
具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx `, g9 @; t c6 `$ K0 P8 W
添加了Application_BeginRequest函数,还记得- <%@ Import Namespace="System.Web.Configuration" %>
复制代码 ,把web.config的内容Import 过来
. Y- k6 U& v9 r) ~$ C. Q" }# ~
2 U: L- P/ M$ X% {. @' \/ l. J方法是正确的,而且比较好) u% U' b# x( `3 |+ k
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
* b* F( t" R; d' w6 [9 k, u* r# Z于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;- public virtual void LoadQueryString()
* U% X4 o7 Y' p* e6 N - {# g9 i, M6 J( w" \$ h9 n
- /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,( ]# h4 w% y5 X
- 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
6 ^# e) i& S" C+ ?5 x, A' _: y5 V - 否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
( J4 K7 _) Y1 D- z6 S% n: f6 Y( A - if (Request.QueryString["ex_id"] != null)
; s! a% I) m5 T# `8 H/ t - {
+ n @# n9 ^' v# B2 @. ? - int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
/ k+ J, G5 m& o3 Z* l/ U& s [ - HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
4 e% b8 T. g7 G6 K - if (!Request.Browser.Cookies)
( ~& Y- k' E; t1 W) t% ^ - {
& Z8 j7 ^4 U1 g# k - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");+ R `+ U: L. F( I5 s" }' l& [
- return;
+ |: @6 Q8 P) \& i3 l - }* Z1 C+ |$ l% b( `% \
- Response.Cookies.Add(ex_id);
" m0 @0 G3 Q! g5 R7 \; p - }
( O( g) X: {( F( y - if (Request.QueryString["cm_id"] != null); b5 \; ?) E4 g& ]6 f
- {, P) h' T5 v" M1 B( x
- int.TryParse(Request.QueryString["cm_id"], out this.cm_id);. C9 w: N7 K4 l6 @+ \
- HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());$ C; v1 @* S( ~
- if (!Request.Browser.Cookies)
: t4 `) |4 f$ g0 [ - {( L3 r& _. V4 ~! s$ B* f/ B
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");: V" [- r5 P/ o/ F. g$ @
- return;$ R, X! ? a: U1 @2 ~0 U+ G6 s
- }
* N+ C7 l4 [& N; }1 K$ h - Response.Cookies.Add(cm_id);
9 v' N3 P8 y7 N - }
6 K2 S5 U7 v$ T - if (Request.QueryString["pr_id"] != null)- V% i+ z, n: }, N
- {/ u3 h# ?0 M+ O5 ~# Z9 S
- int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
3 w/ K+ w* m! z7 {2 Y - HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
- @: t- \5 ^& b - if (!Request.Browser.Cookies)0 k$ v1 y. c7 q+ S4 ~8 ]) Y" W
- {: O# ~0 A( I! Q( S4 n
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");2 b, B( E, L/ o1 X+ `
- return;
5 |6 a1 S, L- ?% D/ R: u { - }+ }7 j- r% e7 z+ `' x* X
- Response.Cookies.Add(pr_id);* ~4 U' e" o! W0 a/ c3 D" a) j
- }
2 i; m" E* B/ a4 ?5 l* [ - }
复制代码 再在asax页面读取Cookie信息;- //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的' p4 x) N# y& e; y0 t
- string ex_id = "-1";
! T6 `7 q: U9 y+ e( _" l& k - string cm_id = "-1";
* `! {8 a0 r) A0 V4 _ - string pr_id = "-1";
% o) X/ e& k" b* p - if (Request.Cookies["ex_id"] != null)
9 k) N! @7 x9 H- q - {) g# @! U L) ~6 J* w5 t! a7 @
- ex_id = Request.Cookies["ex_id"].Value;
' z, p9 f" g+ @( A P ` - }2 P0 H* x$ F5 {0 ?- ?& m
- if (Request.Cookies["cm_id"] != null)6 v9 ^1 D& `1 o/ r( E+ `- s& P
- {
3 y! f. `; I; i8 t - cm_id = Request.Cookies["cm_id"].Value;7 N, y# |- {2 ~7 i- v' F/ I
- }
7 L9 Z( R8 b3 \! ? - if (Request.Cookies["pr_id"] != null)
* z2 p! k2 W8 x; O - {
( P1 k5 l5 e. @4 z - pr_id = Request.Cookies["pr_id"].Value;0 ~- ^0 R" x; ^0 _8 r0 ] V( F
- }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。" g9 g1 F0 g! g# o# l" y: F
- context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码 还有一点需要注意的就是:- /*注意顺序以及IsPostBack*/
8 O" H. t# ~1 h5 {' w4 ~. P, r( d5 X - this.LoadQueryString();
3 i, [1 ]# j3 g2 i. n - this.LoadUserCookie();
v! y) g1 c: N# k' N - if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
, X" ^9 t7 f# r" H: s I - {. K V( r6 [, S X' [- o
- if (!String.IsNullOrEmpty(Request.QueryString["error"]))% }/ ^- K; B# f' [: \; y. c
- {
. w V* b X2 z# A - string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
3 _% Z) m2 C8 n7 a3 O& c - JavaScript.Alert(errMsg);8 k0 F! ^& g+ j# H/ r8 n% L
- this.LoadQueryString();
! Q3 m5 m' n; f0 t" H4 l/ _. i - }% d& Q- S( A, d- u* B: i% ?0 g1 |
- }
复制代码 错误提示,并且能正常重定向页面
; Z) j' V0 x6 D4 U |