本帖最后由 Star 于 2010-12-16 19:53 编辑
) `/ j) `. U6 I$ y- C
. N* q1 l; _ p3 j: b: G, k3 X具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
4 q$ r; v8 Q" N1 Z5 B! r+ v添加了Application_BeginRequest函数,还记得- <%@ Import Namespace="System.Web.Configuration" %>
复制代码 ,把web.config的内容Import 过来
& Q7 G9 i% f, V9 O/ h' Z! p* |1 t$ a8 Q& ^+ r' d
方法是正确的,而且比较好3 s/ |% ]5 @2 w/ A. ^
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。6 ]9 d0 _ |! [* k
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;- public virtual void LoadQueryString()2 e, f9 B9 w+ j! r7 H" g
- {9 u. d$ b6 {9 Y/ \; ^
- /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,% r/ S$ f- i# y0 K" k9 N2 A4 ~
- 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来4 j9 M1 a4 m) X- D9 h- I* f
- 否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
3 s$ r2 I5 Q2 `7 r, X6 A- c% a - if (Request.QueryString["ex_id"] != null)
) w, f& q* L8 a/ i* Z1 J) O+ | - {
# |# F2 T1 L# z$ f0 L7 { - int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
# q8 s( V9 W/ | - HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
/ k; ]" M- I; u7 u' R - if (!Request.Browser.Cookies)( {$ T* b3 X0 u
- {# P9 f) I; l4 L4 R8 P a
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");% y- A+ O! @+ W0 M1 c" X4 l% q
- return;
. _/ g5 r* y" Q7 Y6 ^2 J% I - }8 p2 q: ^0 g" U# F7 u) i
- Response.Cookies.Add(ex_id);. H3 |% F1 A/ X5 o" b
- }1 G+ P: D7 D9 t# O
- if (Request.QueryString["cm_id"] != null)
4 ?8 R7 y- v6 J) C% G/ B% u) ^ - {
5 T: f# s5 u; i+ N$ Q+ ` - int.TryParse(Request.QueryString["cm_id"], out this.cm_id);0 `* f3 X& F) l$ [( ?/ |
- HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
5 { i% O1 q f, C: r+ J7 o - if (!Request.Browser.Cookies); ^* c5 v- {+ a* Q' `
- {1 }3 P9 l3 r7 j6 ?/ b0 h7 ~6 m! K6 f
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
3 W7 O* Q! M! m - return;
, n0 A( f- j* I+ ] - }
) t: a% k; j% x# [5 i0 _ - Response.Cookies.Add(cm_id);# M* ^/ |% B- B4 O" q9 k5 }
- }" C7 c n! N( C: Y4 t4 ?
- if (Request.QueryString["pr_id"] != null)
) V7 c+ m1 q8 g8 e1 ^ - {1 d, l! s+ B; o* o9 I |/ n9 n' `
- int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
" Z3 z/ P2 _* A( o8 X, G - HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
/ V* |+ O" O. t# K6 _# v9 J - if (!Request.Browser.Cookies)& o, \5 }4 V/ @, R
- {
( o/ |2 c2 e6 U8 i* J' P$ N+ G( H& ] - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");4 f+ c# b- U3 g5 \- R+ q
- return;+ }+ d( d2 L: R* ^8 q
- }
8 w* k0 U$ J1 R- r F6 i - Response.Cookies.Add(pr_id);
4 R5 T/ t- P( A% M" c7 n$ h - }
# |* ~& J. g4 p! \' v - }
复制代码 再在asax页面读取Cookie信息;- //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
8 ~6 F: l1 Y8 ]7 M4 J - string ex_id = "-1";
' }/ O8 ~3 X, ^4 ^( I - string cm_id = "-1";
+ J8 K1 B" H6 T, I - string pr_id = "-1";
9 u/ V# P) D' w$ P+ X - if (Request.Cookies["ex_id"] != null)
, u9 k+ c/ l. ^+ K - {1 B8 y: ?5 g$ j3 B
- ex_id = Request.Cookies["ex_id"].Value;2 k9 u0 U0 t' e2 B& @9 l4 F# F6 T; |
- }- V* r$ ~) r, ~$ q+ v$ v
- if (Request.Cookies["cm_id"] != null)9 K0 N& Y/ N7 {4 y( \# A) ]
- {
7 M. S* R- p- {: h - cm_id = Request.Cookies["cm_id"].Value;3 k0 {' l) w) ~) ]' d/ C
- }0 r' z r0 x. k% {; Y
- if (Request.Cookies["pr_id"] != null)
6 Q& i) y4 ~' M4 m - {
/ ?& ^0 @7 @: S6 n5 z - pr_id = Request.Cookies["pr_id"].Value;
1 @) U0 V) T# a' X8 ]( h* f0 b - }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。- i+ b# r( }6 d
- context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码 还有一点需要注意的就是:- /*注意顺序以及IsPostBack*/
) i1 c4 L c6 f% V! @5 e, s - this.LoadQueryString();& I1 p$ R& L' f1 l& S
- this.LoadUserCookie();6 z! p7 [* a t; l J8 [
- if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变4 d. r1 |2 p/ W2 u8 L% d- l% l
- {
: k: e) k' I1 A: g8 I' m h1 T/ M6 W - if (!String.IsNullOrEmpty(Request.QueryString["error"]))
9 J- P7 `) j* F6 a. i( R3 B3 u - {
- k7 q) @8 G) M' ~5 b( Y - string errMsg = Server.HtmlEncode(Request.QueryString["error"]);5 s+ b- s" @8 I7 e- Z2 j
- JavaScript.Alert(errMsg);6 H- X N2 _; w. T6 y6 z
- this.LoadQueryString();
! a& t9 q3 ~& R m - }" I. J! Y+ |; O) ~ n- O' G; E
- }
复制代码 错误提示,并且能正常重定向页面
& j# w6 {9 L3 h4 z: `1 u! O' R# v H |