本帖最后由 Star 于 2010-12-16 19:53 编辑
% W* ^1 ~; q) o6 J' t9 D8 r3 m y8 J2 i/ D4 s Y
具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
! f7 k* Q- ^0 J, W7 A添加了Application_BeginRequest函数,还记得- <%@ Import Namespace="System.Web.Configuration" %>
复制代码 ,把web.config的内容Import 过来! A0 |) O. |' w, ?! X1 r4 |% A
& ^3 f0 P% F0 v; p1 f y& A9 R
方法是正确的,而且比较好
4 F) E$ V) W& z只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
1 Z1 n1 I4 b% A: c. }于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;- public virtual void LoadQueryString(): N/ O; w _3 \0 A- s
- {
' l7 l9 N" ~6 Q - /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,3 \, K, F4 e! r; T5 g7 r
- 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来- F, \. t0 c+ q+ o( P; `/ r
- 否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/3 N7 Q H$ j3 l/ p! ~ a
- if (Request.QueryString["ex_id"] != null)% V- R5 |; i( o" H( C: j" V* u
- {
# N, P* r) @+ D5 z - int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
. {& r: S3 y" b# A1 C/ ~. G) Y - HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
. C* X. q- J e1 u - if (!Request.Browser.Cookies)
% q0 S, T& t/ [ a5 W - {
( d$ a+ H$ r( P! g6 l - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");: E1 t" q% ]8 x2 B- w% T. m8 z
- return;
8 f3 a) r/ m5 {# g) v! I5 ~2 i - }
% x$ Z* z# h: N - Response.Cookies.Add(ex_id);
8 |% i, [# ~8 y" l6 c) m - }! B3 v# W. f2 s+ z. [$ M5 J6 y
- if (Request.QueryString["cm_id"] != null)0 P+ n5 U6 r4 {# k: E
- {
& h! S% u( h* y @& Q6 ~, d; \ - int.TryParse(Request.QueryString["cm_id"], out this.cm_id);9 v# F3 r4 {2 L4 b
- HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());* p! u2 V# r$ b: V" @
- if (!Request.Browser.Cookies)
5 i) D$ ~% X& ]7 v' d0 U - {
2 R( _' J0 o9 ? - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
* s$ N. G" Z( ?' n' i- {* [ - return;: A5 _) L: [ R
- }
8 T; V% u* w1 q; F' ^0 \ d - Response.Cookies.Add(cm_id);
! V& i; q; {9 a" V# Y! W - }
/ X5 e( |0 @6 ]& U - if (Request.QueryString["pr_id"] != null)
6 _" K3 }6 {, u" n - {0 F; Z! l1 T( H/ x
- int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
- U, Q+ W. y+ A1 r$ N - HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString()); m$ f* r& v+ @& I- Z, z' J
- if (!Request.Browser.Cookies)
/ ]0 v! ]+ ?, I! u/ q - {
9 W# f$ T$ Q- F2 u- H - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
$ Q, W0 \( x. X" Z - return;# V+ S' f* X7 I& I8 }
- }
- u9 e* b8 O2 h" `' Z: \! U - Response.Cookies.Add(pr_id);
% W7 B* W f6 j7 M. F& J - }
* U- H* `4 q* E' u - }
复制代码 再在asax页面读取Cookie信息;- //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
; m3 ^3 v6 V2 r0 ~3 n7 D& D1 a - string ex_id = "-1";0 J% k0 ? u" L/ ~7 t7 k
- string cm_id = "-1";
7 s: t6 U8 a3 ?1 j - string pr_id = "-1";+ ~6 t) p9 n7 |" J6 c" F" T+ L4 M* |
- if (Request.Cookies["ex_id"] != null)
* C. `* V- {- S: m% U% v2 f6 A9 V - {
% x; ?% R o% h, H* V9 S1 C - ex_id = Request.Cookies["ex_id"].Value;. X$ U: [) I2 B! B0 k: ]( W2 D
- }* ]5 n X1 i0 m" V
- if (Request.Cookies["cm_id"] != null)
, b' }3 i: t! l6 x/ {4 Z - {9 e; @$ ]0 _! U1 d
- cm_id = Request.Cookies["cm_id"].Value;
; M C) E$ o k$ B( I - }! N+ B# w- e4 ^
- if (Request.Cookies["pr_id"] != null)2 ]$ p2 G0 c2 p, Y4 T
- {( U4 j# `' V( r8 `' D
- pr_id = Request.Cookies["pr_id"].Value;
9 B( B6 n0 T) g2 Y - }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。3 `) u% W+ X( \* |; c* E
- 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 e- a" j9 H: F. Z4 {+ b* L/ P1 g7 r
- this.LoadQueryString();& Z( V/ a2 Y/ v0 t X
- this.LoadUserCookie();: x3 S0 }! Q9 C* b, |
- if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变; ?, f' b8 n$ W3 n9 |6 L5 W
- {) @' K9 `$ b9 m6 r8 k0 d {& o
- if (!String.IsNullOrEmpty(Request.QueryString["error"]))
$ r z( Q1 K7 Z4 Z - {( X! _1 X y* z& [2 R3 t( _0 s' I
- string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
! q, N. w6 s* J" Y6 ^ - JavaScript.Alert(errMsg);9 q3 f [4 F8 ^5 A1 Z0 Y% x
- this.LoadQueryString();
' M) ~5 D4 ^/ [# ?$ h& d. y - }
3 c6 q. B: d1 V1 X D - }
复制代码 错误提示,并且能正常重定向页面
2 s6 }! I9 g ~/ _% R |