本帖最后由 Star 于 2010-12-16 19:53 编辑 4 e# P& w0 @$ f) c7 z
) B% `# G( w2 ^7 a: h具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx3 [9 A& {. Y6 s8 K7 l
添加了Application_BeginRequest函数,还记得- <%@ Import Namespace="System.Web.Configuration" %>
复制代码 ,把web.config的内容Import 过来
$ j3 v/ q2 G( p/ b- f' t. }" B8 K. h) Y4 j& H6 x/ M
方法是正确的,而且比较好) u% C( _+ N8 r; ~/ I" X5 u
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。% D) T' E' {7 h8 E, B9 k
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;- public virtual void LoadQueryString()1 S2 s' w( S0 B" f8 B
- {
0 b6 g' i9 l* c0 Z - /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
: w" w2 C& D3 l3 Q5 B! t - 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
) \1 z& L) l L- r6 ]& X$ f - 否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/: d8 S- s" [$ p0 M0 R, ?: Z
- if (Request.QueryString["ex_id"] != null)
9 L( _( R3 E6 [6 x* G6 ^ - {: a0 |" d$ n% c2 S% s# k, \
- int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
; m; a/ S, A7 e3 h - HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
% E* F/ d9 p$ J0 z - if (!Request.Browser.Cookies)! ?/ T$ n& S F. s: u% l$ d3 k- ]
- {
0 T! N8 N: w, I; r - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");) V2 W" N) [* \5 i8 Q4 w- e
- return;
c; f+ m9 o k" ] - }
1 e. V1 h" \) T. r4 }) y) O }5 [ - Response.Cookies.Add(ex_id);
; R( Q8 l6 t4 Q - }
7 F+ j+ o5 E# N3 j' o - if (Request.QueryString["cm_id"] != null)
* ]3 ]: J |* Y& D* h4 W* | - {" [! x& l* U* w1 F4 f- ?9 V: a
- int.TryParse(Request.QueryString["cm_id"], out this.cm_id);. Q5 v/ F/ U- P* t0 W8 R9 N" {9 W3 {
- HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());" {7 y, \! u1 z" l7 H
- if (!Request.Browser.Cookies)
3 Y2 t) j$ t8 X1 c% y - {
n+ l o# S0 b- W7 J$ n6 s5 ? - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
) m+ q1 p+ i J - return;2 U8 m8 K$ Q' x
- }; n; @: ^' g( X, b4 r
- Response.Cookies.Add(cm_id);3 }: y, G, X( U1 T: J8 G# w
- }
. G# h0 y, R9 p# |0 a& O' o* [ - if (Request.QueryString["pr_id"] != null)
0 M6 Y0 A/ @1 V - {
$ _5 R+ t2 k3 L' J# K7 ]+ v- z- ? - int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
) r" @+ i6 S0 V* l" O6 ?' r( r4 t - HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());# _' Z8 M+ |$ D4 {1 f% a& u
- if (!Request.Browser.Cookies)1 ~7 v# Q3 C( o- ?: d. t4 ^7 D' ~
- {
7 d6 D9 W5 t5 r - JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");4 v& H( @! t( n7 u
- return;8 M0 i6 C% i2 ]$ Q
- }
# s5 T- y+ c a6 D" q, F8 Y - Response.Cookies.Add(pr_id);
5 x; `) o! J( y# \! F# a8 C8 V - }& D5 n! n# V5 i2 m. z5 I5 D% }
- }
复制代码 再在asax页面读取Cookie信息;- //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的4 M" {: Z: c+ N( j. M8 T
- string ex_id = "-1";4 q0 W7 `/ Z, I* c" k3 \
- string cm_id = "-1";
: g# u" Y) {9 U: `( i' a - string pr_id = "-1";. h! l7 }/ P8 k! j: u k/ q
- if (Request.Cookies["ex_id"] != null)# T- }4 ?$ f2 @, G3 m: U; D
- {+ e8 |/ n3 K/ ?
- ex_id = Request.Cookies["ex_id"].Value;- r) Q$ G/ c V) |& j7 {+ M) t
- }# {* D6 `, E3 n; j; A/ u C
- if (Request.Cookies["cm_id"] != null)
9 c S1 P+ ? i" V( ?2 O" V - {2 [ t$ V# o% N6 h& B
- cm_id = Request.Cookies["cm_id"].Value;0 k- i! u! U, M5 R
- }
7 e# h. i# n. {" { - if (Request.Cookies["pr_id"] != null)
: U9 Q! G- }4 Y+ \5 k- n - {$ ]$ P& i1 }$ m- x. ^! d
- pr_id = Request.Cookies["pr_id"].Value;
5 j( l- r; _" G6 ~) L - }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。: H0 r8 K, {* n4 `
- context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码 还有一点需要注意的就是:- /*注意顺序以及IsPostBack*/
2 [4 v K9 L" B7 v: N" a8 n - this.LoadQueryString();1 R; W; b7 G1 X" N2 {
- this.LoadUserCookie();
5 n' g9 b! B* [7 e - if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
" E8 \- ^& T( r/ M - {4 j4 J! P6 g6 w/ c( C
- if (!String.IsNullOrEmpty(Request.QueryString["error"])) Z" C) y' r8 `/ N2 f( Q
- {
+ t' s" A; U, N; O - string errMsg = Server.HtmlEncode(Request.QueryString["error"]);2 |( a8 m1 T& ]( b6 Z7 c6 [# e
- JavaScript.Alert(errMsg);
, j6 t. w4 S+ g4 o3 ^! ? - this.LoadQueryString();* n; I: d `3 N4 R3 i2 v
- }
, _+ J n4 C$ _/ F8 K8 V! V$ o - }
复制代码 错误提示,并且能正常重定向页面
/ B8 C- |+ K3 x% ~/ O6 e7 i) \+ x |