本帖最后由 star 于 2010-12-16 19:53 编辑
2 o p1 {% n8 c" j$ o% p4 _' j5 y* p: v/ @$ h" c
具体办法是参照的这里:" k* `* c: e2 f& l: z% g `
添加了application_beginrequest函数,还记得- <%@ import namespace="system.web.configuration" %>
复制代码 ,把web.config的内容import 过来
, a2 l( r g |- s% t1 |, [- v% \4 {( a: [& p d; q
方法是正确的,而且比较好9 e5 l0 l# t0 k. x \& f
只是eb_exp有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到querystring,应该是request的内容已经修改了,之前的地址参数已经没有了。
; g' f2 s* y* u7 l$ j! d. m/ x于是在practicepagebase页面在读loadquerystring函数中,在读地址参数的同时将其保存到cookie中,cookie信息是可以在有效时间内保存的;- public virtual void loadquerystring() h7 b4 \5 w' r6 g8 b
- {
- v( t7 o1 t1 c - /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
& d! i0 g7 x" s - 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来/ j5 b6 d \ z! h# i4 f' s" `5 b! u s
- 否则页面重定向没有再传入实践id等参数,页面会加载不了数据*/
. v7 c) c- a- m9 f - if (request.querystring["ex_id"] != null)
' y3 t/ m r4 b3 r) a - {
% i! ^ l; c3 t$ [0 g u8 u9 q' _ - int.tryparse(request.querystring["ex_id"], out this.ex_id);
# r/ f( {& o- ~% d, a# i& r. p2 e" u - httpcookie ex_id = new httpcookie("ex_id", request.querystring["ex_id"].tostring());
# j0 k, y6 y- k: k - if (!request.browser.cookies)
. e( ]! e7 j2 z8 a7 }9 _ - {( x: t5 v% k2 z1 c$ u `; i
- javascript.alert("usercookie_unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
: {# u' q! d6 r; [. x' { - return;
: |1 i- c _; e: {7 m- k7 k5 t - }# f( b! f# f( b' f
- response.cookies.add(ex_id);9 f4 y r a( u2 p q3 h3 a/ i
- }
o v0 i9 r% u1 ]/ d - if (request.querystring["cm_id"] != null)
y" y, }3 l$ h2 j6 \7 [ - {
. {' }% h/ ], x p" f: l - int.tryparse(request.querystring["cm_id"], out this.cm_id);
2 u6 m, u& ` r7 l- i0 f2 b - httpcookie cm_id = new httpcookie("cm_id", request.querystring["cm_id"].tostring());
$ r: d! b! k. l! g1 w- @3 g- g - if (!request.browser.cookies)
2 r7 n3 l! u7 m - {
8 ^: b1 k6 y: o0 i1 _ a/ }# y - javascript.alert("usercookie_unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");0 e q3 n* u9 i; {$ a h8 s% ]
- return;
2 i1 x- x, b2 r& d, h" j - }
5 o- d6 f5 a j - response.cookies.add(cm_id);
' z; g8 e3 j2 l/ f5 n k; o$ m* f& t - }1 w1 @' h/ l3 d: v1 h
- if (request.querystring["pr_id"] != null)( ~& w8 u, s4 h6 `( j5 ~5 ^
- {( e# s* k0 b1 y- a; f g ~
- int.tryparse(request.querystring["pr_id"], out this.pr_id);
2 `1 c3 ?& n3 p4 r9 h - httpcookie pr_id = new httpcookie("pr_id", request.querystring["pr_id"].tostring());, g0 _0 n7 g d9 ~ n2 s
- if (!request.browser.cookies)/ l/ m5 b1 \* b
- {
: q* m0 ]" u( w1 z/ i% i" k - javascript.alert("usercookie_unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
* ` {; ~8 q$ \ - return;
: w- i2 g; e7 w/ v9 h3 @ - }
( w& \2 t* e; a8 }5 |$ @ n4 a; o - response.cookies.add(pr_id);( b2 w- c y0 [' b g
- }0 v, m4 d! q0 c/ v( y: v
- }
复制代码 再在asax页面读取cookie信息;- //读cookie信息,初始化为"-1",因为practicepagebase是以-1进行判断的8 s* ]- x9 a' e
- string ex_id = "-1"; f2 w/ e8 b z1 l) d6 m9 u
- string cm_id = "-1";
8 j# b; g% w2 t0 q# @; k }. z - string pr_id = "-1";
0 w* b6 [- _! t8 j - if (request.cookies["ex_id"] != null), v. ?0 o |# r$ g9 m' d& m
- {
' r* p% r4 `( c& y. ^* _6 s6 z - ex_id = request.cookies["ex_id"].value;
: q; l7 y( o2 m$ z5 @ - }; n- n' d8 l) {
- if (request.cookies["cm_id"] != null). q( p( i v; h
- {
; [& o# t1 ~" s! x9 s - cm_id = request.cookies["cm_id"].value;
7 h" c- t3 y. ?. o0 k3 w- o- a - }6 p! f! _7 v' `& ~9 m5 i m
- if (request.cookies["pr_id"] != null)
" @6 r% j! l* | p. f0 n6 v8 q - {
. q# u c x* m g* n - pr_id = request.cookies["pr_id"].value;
& e/ ^( ^2 b; r! f - }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践id等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
- v8 {0 m- l9 c q* x* n - context.response.redirect(this.request.url.localpath "?error=" server.urlencode("请上传小于4m的文件!") "&ex_id=" ex_id "&cm_id=" cm_id "&pr_id=" pr_id);
复制代码 还有一点需要注意的就是:- /*注意顺序以及ispostback*/ 7 n: p/ n" h# c/ j% k$ u* j
- this.loadquerystring();
) [' p# u4 x/ n0 b - this.loadusercookie();% r: s5 q$ v* l; ]- g& i
- if (!this.ispostback)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为request.querystring["error"]的内容没有改变
6 l1 ^* }& q, m n - {* w4 h5 i0 s* \% y
- if (!string.isnullorempty(request.querystring["error"]))
* d m' r! o1 \1 w" n" f v - {
, l% j# u/ i8 v: c' t! r5 z - string errmsg = server.htmlencode(request.querystring["error"]);6 k* r, e$ _* d l2 _
- javascript.alert(errmsg);
7 x- v3 o w0 z7 i - this.loadquerystring();% m0 s8 ~. t3 }1 j3 ^
- }
v7 z# p" j, g* f8 q! {7 p. f" g - }
复制代码 错误提示,并且能正常重定向页面
p n( \% c5 m |