本帖最后由 Star 于 2010-12-16 19:53 编辑
( n7 g1 g% h. k, \
5 t% T# X* c: Z. I" k1 e w# n4 I具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
! w( k% a0 k: z6 p添加了Application_BeginRequest函数,还记得- <%@ Import Namespace="System.Web.Configuration" %>
复制代码 ,把web.config的内容Import 过来3 R- a7 F! i0 q
" G0 t. Q9 E& s方法是正确的,而且比较好0 O& v9 ^( R; M g4 V( I3 L8 O
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。& }# q$ `" [$ D& f' v* I
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;- public virtual void LoadQueryString() C/ u8 u% o( r% N5 M, P% X" J0 z
- {- S G# i/ p8 s( J$ e0 w% f
- /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,) G. |, ^8 r- [& r6 v2 X& x' m
- 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来! ~2 N9 H9 K8 K- l
- 否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
) n J. M6 C0 U+ s/ } - if (Request.QueryString["ex_id"] != null)( M5 X! A; g. A. S
- {
' }! G: t5 R0 }1 K H/ d+ Y - int.TryParse(Request.QueryString["ex_id"], out this.ex_id);: G- r$ a; c% T$ X8 t
- HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
# ^0 U9 v% P' i* i) O2 X - if (!Request.Browser.Cookies)
) l- x4 P5 ~; F/ O( j9 D - {
7 d% N g5 j3 w" w, k3 r) m - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");. N( J$ y8 e, z" V2 \8 e4 a
- return;
' `% a$ f' o( n/ f, \4 k; n: k - }! {8 I- P4 W/ r. o7 C
- Response.Cookies.Add(ex_id);
6 r9 e( T8 w+ l ^8 | - }+ ^. L$ \/ ?' C$ w6 Y& e( l
- if (Request.QueryString["cm_id"] != null) [0 W$ _+ p9 p7 d5 v
- {+ |, y6 P& Q/ Y% | `
- int.TryParse(Request.QueryString["cm_id"], out this.cm_id);/ K8 t( ?5 @# U T7 ?
- HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
9 t' k9 K8 p% M( ~8 k% o - if (!Request.Browser.Cookies)
W: M* Z: V! F5 l; z+ B1 } - {6 i6 N3 `5 |" e6 I u8 G2 P4 t& A9 z
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");0 u O$ l9 P+ s2 P$ V- N6 y9 W# C
- return;- t. ^* y; b- v
- }1 P8 M$ D! e- Y% I1 G0 n9 F
- Response.Cookies.Add(cm_id);" d6 |, ^, Q+ g; T- ?
- }' S0 z3 X/ B7 I
- if (Request.QueryString["pr_id"] != null)
) U+ T8 h3 t& X9 o; \# u4 J+ y! A: l - {/ N7 K* I' M, K
- int.TryParse(Request.QueryString["pr_id"], out this.pr_id);3 l7 l/ S. Y$ V E
- HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
+ ?* c9 {( ^. h7 z - if (!Request.Browser.Cookies)
! e! z. {8 N s% g) E7 i# l - {
) g9 A- r' m3 P1 ?6 Z' } - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
# ?6 X4 P4 \" y' U3 c; o! _4 h/ d - return;
, ~/ \& e7 q& ~% b - }0 D8 z0 Q* l8 Z# P9 U$ H! q
- Response.Cookies.Add(pr_id);
' T7 K6 @6 u( G$ J Z - }
) u3 m0 S" c% L2 @) S - }
复制代码 再在asax页面读取Cookie信息;- //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
2 e: m6 F& }0 d1 @3 N - string ex_id = "-1";
2 k$ {7 Y3 F) l% {1 U" x - string cm_id = "-1";8 r6 N/ ]2 j' c3 F" j
- string pr_id = "-1";8 H, Y+ \! m3 _3 J2 g
- if (Request.Cookies["ex_id"] != null) Y. }8 f$ l/ E k, k" ?2 ?
- {0 z$ O r. B% [! n( p
- ex_id = Request.Cookies["ex_id"].Value;
m$ e0 s% f, q; Z& Y; W - }$ m" I$ A" X% V' ]
- if (Request.Cookies["cm_id"] != null)
" `" e$ a! g( P) F6 `9 J$ P+ j - { }2 G* B$ z6 _. H4 r
- cm_id = Request.Cookies["cm_id"].Value;
) n9 u7 W& g9 p' C1 C- o: _4 Y( p - }
: a% F& Y3 W7 h( k' s \6 r - if (Request.Cookies["pr_id"] != null)
, L% ~. t: _, z" O - {4 r9 Z7 L* y: z/ J: H
- pr_id = Request.Cookies["pr_id"].Value;
2 O" T, d: G% ~' t/ Y - }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
$ l9 W% u* m8 P6 J7 R% Y6 ^; G - context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码 还有一点需要注意的就是:- /*注意顺序以及IsPostBack*/ 3 m" k* e# \& x& K4 B0 P
- this.LoadQueryString();
9 j+ j4 j! W. H( ]) \ - this.LoadUserCookie();
( j" ]0 j8 V% m+ T0 A2 f8 X p - if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
1 p& E- q; u: Q! ^4 l- C7 B( m - {9 }+ J$ P1 F1 E: d
- if (!String.IsNullOrEmpty(Request.QueryString["error"]))9 k% c5 Z% I9 J" [& A* S
- {: T( x$ A, i# U) F
- string errMsg = Server.HtmlEncode(Request.QueryString["error"]);& Q( S/ |* p t* q& d
- JavaScript.Alert(errMsg);
" x! C* \: W* F0 ?4 N - this.LoadQueryString();5 g* a" `* A: c6 E7 ~3 V
- }" T. S, E$ E7 I* A3 M4 o% Q
- }
复制代码 错误提示,并且能正常重定向页面( J8 f/ l+ L' _1 ?* ^
|