本帖最后由 Star 于 2010-12-16 19:53 编辑 . a! c3 B% u2 j
0 F: g R/ v0 R( M% I具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx9 Q( V+ O1 A! {' @: Q$ [
添加了Application_BeginRequest函数,还记得- <%@ Import Namespace="System.Web.Configuration" %>
复制代码 ,把web.config的内容Import 过来8 A1 L0 ^% G+ j2 R7 r
7 @6 \, t0 [+ F' I$ u+ v5 ` [$ Z
方法是正确的,而且比较好
* {. q3 O+ ?% o6 ]4 Z h只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。6 n5 Z) `- W/ a* s# v; |
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;- public virtual void LoadQueryString()
$ H# m* C0 O( H& B. F - {
5 u5 v9 s9 D8 p. { S, q* r) \ - /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,2 y1 j8 {- T7 `# T) Z9 ?
- 所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来6 S/ H8 J3 o5 z3 N
- 否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/- \; i: B( ~) o7 x
- if (Request.QueryString["ex_id"] != null)
/ G$ C. N& J/ n( }( | - {
$ v& K8 {" i2 p, h3 U - int.TryParse(Request.QueryString["ex_id"], out this.ex_id);8 L2 S9 C% |. {
- HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
9 A3 |. D1 n; z8 H - if (!Request.Browser.Cookies)2 w! {% e4 R- C. T# O7 q$ Z8 r
- {, }6 n! w! I" e+ z
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!"); n0 X; E5 Q. z7 r$ V( U. Y
- return;/ ~9 r1 C% e+ c- d% A
- }
% M8 C8 {5 C- b - Response.Cookies.Add(ex_id);0 [# m `+ v' r, Z0 a; s$ g& d
- }- t; a$ L5 ?4 r$ O3 J/ W( j
- if (Request.QueryString["cm_id"] != null)" x2 k9 @% t/ D/ m: k
- {
2 {$ W e+ B/ v( I- I - int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
z) e# T$ \# p- ~6 B0 b* \1 a( _ - HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());* @- f$ T* x: G" b
- if (!Request.Browser.Cookies)! N" u& S6 w" g4 D1 v4 p$ T
- {. ?: j7 o3 x7 K: g @
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
$ x5 c) G% ? }2 K - return;. Q# V; Y* [0 d: \ L4 E
- }
' u$ l% m/ D# d& U8 ]7 l. B' e - Response.Cookies.Add(cm_id);
; K, k5 q) q1 r( ?* s% V3 U5 l - }
9 E# Y$ Z; G. ~ _ - if (Request.QueryString["pr_id"] != null)
0 y, [( u( V8 v - {# I4 D6 C+ I* s% c3 Z* A/ x8 [
- int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
. }) j& Y0 X( X - HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());1 P! k# m$ V f2 x; L" V) m! I
- if (!Request.Browser.Cookies)
' N9 g3 K) Y/ V; p) N' X - {5 e1 E' G; B; V1 ]
- JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");( R) k" [) {" @
- return;
( k8 {( @* l/ d& _" m ~; g - }
4 Z& B$ ^- c7 n, t- C& X3 N - Response.Cookies.Add(pr_id);7 D. h$ R; f' t/ g8 h" M
- }1 k' }4 U8 \& N# K% p" E
- }
复制代码 再在asax页面读取Cookie信息;- //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的9 B7 Q3 K) S( ]- \' Q$ k
- string ex_id = "-1"; @9 w$ F2 o$ I
- string cm_id = "-1";- y/ ~( k2 R: v4 j2 d
- string pr_id = "-1";2 s- i9 Q. g; D; ?
- if (Request.Cookies["ex_id"] != null)& b! z9 R5 }. \; \- w
- {; ]; B, r! b- k% M) M2 K
- ex_id = Request.Cookies["ex_id"].Value;
T$ p% a M) n/ E4 y5 H: [ - }
. }$ a1 z$ D$ [( g - if (Request.Cookies["cm_id"] != null); r( s: a: b, F# K
- {
0 v( P% h2 `4 E# m7 t - cm_id = Request.Cookies["cm_id"].Value;" X/ x! Z! K( z: Y& F
- }
4 ?% @, m. E6 h - if (Request.Cookies["pr_id"] != null)
+ X4 h+ Q3 h' x M( K0 D; {; k1 S0 p - {
7 {* S m0 N% A2 | c/ H1 a3 ` d - pr_id = Request.Cookies["pr_id"].Value;
- `) ]6 V \+ U- G: ~ - }
复制代码 最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了- //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。" I7 m5 j. ^( g8 Y$ h" e. v
- context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码 还有一点需要注意的就是:- /*注意顺序以及IsPostBack*/
% G! O7 m. b( k# Z - this.LoadQueryString();
2 e7 |: w5 x6 I; v - this.LoadUserCookie();
! S) x- g& o1 N - if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变# Q, i2 v( z& g7 I7 S/ n& U
- {6 j( ?, g- @; D& I4 K, R% h& K
- if (!String.IsNullOrEmpty(Request.QueryString["error"]))
& m; H/ ]; _# y) o, V - {: _0 _0 a/ \6 R2 \2 a! ]
- string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
& x0 |" v, T. h6 y8 T4 k( w: O - JavaScript.Alert(errMsg);
9 Y5 b7 {9 W( m6 k" p$ F - this.LoadQueryString();
1 G9 j2 R: n4 g' N - }/ S. [* K4 G& y6 A
- }
复制代码 错误提示,并且能正常重定向页面* f) Z: t- v `* V5 X, ]8 g
|