本帖最后由 Star 于 2010-12-16 19:53 编辑 3 B' ~* c) Z. K% W" ]) w- K
- y1 G$ ] p: B1 P具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
9 O0 X. p5 O% I5 w% p添加了Application_BeginRequest函数,还记得- <%@ Import Namespace="System.Web.Configuration" %>
复制代码 ,把web.config的内容Import 过来
; }5 w( C H! L3 q4 b) \
! w: \5 f0 @( E& _方法是正确的,而且比较好! L5 E! Q6 A, }* H2 t# a
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。 S) w6 V4 q3 P% m$ P; I9 U
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;- public virtual void LoadQueryString()
; z* B4 g0 [! D/ I, l - {
2 A! I3 U( x$ b - /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,: g& S& u& ~4 j' ]: R
- 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
9 h1 t( k( b) h& |' N1 c* v; T6 h7 L - 否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/7 w+ j- \ G$ x" R
- if (Request.QueryString["ex_id"] != null)) Q; A7 E7 u9 X9 G Q' O$ _
- {% R; E! ^" q; Y* v" p+ h
- int.TryParse(Request.QueryString["ex_id"], out this.ex_id);/ |) U) C+ a$ E/ O
- HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
4 v9 R5 w9 |$ T$ _ - if (!Request.Browser.Cookies)9 t+ w3 i& T; t
- {- o) f& Z1 z2 [5 x! N. C
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");' L) Y" Q4 g& v* V" w
- return;
; U4 o, o0 K5 A5 u/ q( r b. s" r1 A - }* u2 a0 p/ D6 N5 r5 \& L8 M0 @
- Response.Cookies.Add(ex_id);
, |4 d7 R/ q+ J# O. O - }
9 f! ^/ [! b i - if (Request.QueryString["cm_id"] != null)
2 H" P( }- T3 I& U - {! {% h7 d5 E& Z9 E" J d/ Z4 _
- int.TryParse(Request.QueryString["cm_id"], out this.cm_id);: J: J* f5 T3 q* W% K, B) k% p
- HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());% P* M- }0 U/ j9 g' S, A
- if (!Request.Browser.Cookies)5 i9 h5 c$ g- Z9 i" E6 R
- {7 |9 }8 W9 ]- y, [- Z0 R. Y( k) y
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");1 L) p K9 O" k; R& A* T+ {
- return;1 ]% N& C+ \9 L
- }% ]5 w9 o8 y/ r; r
- Response.Cookies.Add(cm_id);
! u+ c* u3 T. t1 n' n+ K - }
$ M- {- P; U- C- z3 X, f$ o - if (Request.QueryString["pr_id"] != null). Q/ V' ]. x( g' k
- {% |; o& S. u8 w1 K4 A, ]
- int.TryParse(Request.QueryString["pr_id"], out this.pr_id);/ n& \1 u9 E3 {1 ^ w: Y/ Y
- HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
; {/ I/ U# ^( v/ W# M0 V6 B* s1 O - if (!Request.Browser.Cookies)
! _# D5 u* [, V: M8 ~" m7 f' O$ T - {9 ] J/ s* J w2 C
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");% O) I! f$ d8 e5 P5 j" ?
- return;: C, i! C9 [" D4 U3 `# c
- }
+ p8 ^0 O% l# x4 n- f - Response.Cookies.Add(pr_id);
8 S* p& l. N' J/ ]; _: ? - }
: f `1 i+ h9 F2 E+ w* ] - }
复制代码 再在asax页面读取Cookie信息;- //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的( f# v# C" a C" A1 \0 d
- string ex_id = "-1";7 `1 K7 F9 d, M* E, C/ L' M" ?
- string cm_id = "-1";
( G! M7 q! L9 W6 m - string pr_id = "-1";
: B* Y% F [2 y2 x - if (Request.Cookies["ex_id"] != null)9 v3 t# k# N6 z
- {
$ ^9 M* t+ f, h* ]$ ]& | - ex_id = Request.Cookies["ex_id"].Value;
, t: B: R- a9 P' d4 J - }0 b$ b% l s S3 h
- if (Request.Cookies["cm_id"] != null)
) N" k2 \3 {; r0 N) O* K) i# P - {/ |6 R H: F: T+ a# n0 G
- cm_id = Request.Cookies["cm_id"].Value;
4 e. ?6 n; V5 q$ |+ ^ - }
! h/ _# R5 S+ }/ _0 o3 Y - if (Request.Cookies["pr_id"] != null)2 V- g# l3 M) @2 F
- {
1 A5 p+ c4 R) B - pr_id = Request.Cookies["pr_id"].Value;1 u# B" `3 d* b p }
- }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
1 L; Q2 A+ ]4 [' L1 Y) l; _6 T - context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码 还有一点需要注意的就是:- /*注意顺序以及IsPostBack*/
& K* Y2 P+ {- k( p - this.LoadQueryString();
8 x I9 x/ m5 E% U. Y - this.LoadUserCookie();
, P: V6 \" e9 t; t - if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变- x7 w$ F) r+ E9 ~; E+ ]# N
- {; K' \+ T8 H- z& F! Z! p0 B8 e
- if (!String.IsNullOrEmpty(Request.QueryString["error"]))
8 N0 u, D0 g$ p9 f - {
g9 [5 @( i& N - string errMsg = Server.HtmlEncode(Request.QueryString["error"]);9 N* _) @ C9 P& z
- JavaScript.Alert(errMsg);
" \4 U' q. N/ C- J/ M - this.LoadQueryString();
6 n4 D9 B- \5 U) N - }
6 K# `) f. Q: H* _ - }
复制代码 错误提示,并且能正常重定向页面
. K# H9 f* t& g1 [5 d4 k |