晨鸟科技

标题: 【体验式实践系统】上传文件大小限制、捕获大小限制异常 [打印本页]

作者: Star    时间: 2010-12-16 18:44
标题: 【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑 $ g" C1 e! r9 ^0 v) [

: Y! `9 N. `4 P$ @* ?$ k+ c. U具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx8 C  Y) ~; V: q, D
添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来. C" g2 W$ q0 t2 Z+ ^' t
* j2 e" j/ v. @" x+ w& B" f0 \
方法是正确的,而且比较好
* I, K- {6 f; Y/ J: f6 U; y只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
( E* ~* V7 ?/ {( {& Q6 Y! G9 R- t/ x于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()9 f9 q$ J/ {) k7 r
  2.     {# J: \8 C% b- x# a/ W
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
    3 l" E& R) s0 ^  E+ m$ s
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来: O$ ^2 Y* p( f. C
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
    0 q  `% ~: N# ?$ j$ i% e+ v. E
  6.         if (Request.QueryString["ex_id"] != null)
    & f1 w: B0 N8 z, \
  7.         {4 s' B2 @! u0 [# P* P$ a$ n
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    & n( n: J" }( \! a
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    ) A, l5 u% u6 u: y8 I
  10.             if (!Request.Browser.Cookies)
    % Q* z, U& {2 J5 c
  11.             {" z- u  B8 \' b/ q& a3 H8 y
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    & h6 p" b  B" O- z; j9 X0 I* o; }
  13.                 return;# Q0 \3 o0 a7 H- @# t6 K7 o
  14.             }
    ( Z! m, a: _1 N8 ~# z
  15.             Response.Cookies.Add(ex_id);
      b! ~; l# B; L) E- \
  16.         }
    % o) P" n+ @" A) f2 I4 P' K1 K  k
  17.         if (Request.QueryString["cm_id"] != null)
    2 U) v+ H, ?# I, R, X
  18.         {; S, C& t* w9 T2 ?- _) ~5 y
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
    5 |# |9 }" U7 e3 T4 G  a
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
    6 F1 o3 }% J* e4 F( |4 U
  21.             if (!Request.Browser.Cookies)0 }* L& @; r3 ]4 i& k9 e
  22.             {* [; b( _8 n' _; x
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");* [1 Z0 T7 P: q/ _
  24.                 return;
    4 q" |3 j8 I; j+ [% \; F$ ~
  25.             }
    $ k9 N: M0 h4 V. I
  26.             Response.Cookies.Add(cm_id);
    4 q) j/ |) [0 F3 V9 b$ f2 o: U
  27.         }
    ' u  [$ N# t( P* |3 f; I+ Z
  28.         if (Request.QueryString["pr_id"] != null)
    + k3 r7 f" p" v5 g$ C8 n! _6 x
  29.         {" w2 x( \- b( r% T- C
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);: T/ h' l9 ^8 J) i
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    ' ]/ C  d, b/ p" {' s
  32.             if (!Request.Browser.Cookies)
    # _$ \2 Y. }5 e+ k& p, {: Y% D
  33.             {+ l- @9 q8 j+ R: S2 n; l  U
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    7 q9 o3 Z/ D/ |0 j
  35.                 return;' ~4 c4 C( M  C) j; X: B/ P, u6 L
  36.             }$ g& L/ u  E1 v+ K# C3 z& F, }
  37.             Response.Cookies.Add(pr_id);
    3 U+ w  z# L+ P% t' _- M
  38.         }* d5 I; _' l* b/ n  B3 B0 x
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
    % W: S& J: W3 |$ @
  2.         string ex_id = "-1";
      ~1 m7 _$ K  ^5 c! [. O7 r* ~
  3.         string cm_id = "-1";
    " L7 @- i  [9 |/ E! p& Z% p
  4.         string pr_id = "-1";
    5 u) L, G! j* V1 h
  5.         if (Request.Cookies["ex_id"] != null)* o3 U  I) j0 K$ y+ P4 u6 u
  6.         {6 k5 r+ H0 C$ A! g1 d4 w! k
  7.             ex_id = Request.Cookies["ex_id"].Value;3 k" [( l, a/ o+ W5 q7 o" \6 v  |8 E
  8.         }0 a3 O+ i3 V& `  H+ f# Y( ^
  9.         if (Request.Cookies["cm_id"] != null)
    & e2 w7 J1 B4 q& D" G! C
  10.         {" N+ c6 E0 i" p) E( t
  11.             cm_id = Request.Cookies["cm_id"].Value;
    - b* F6 y& w1 X
  12.         }. n1 z. L, \, \9 L! t
  13.         if (Request.Cookies["pr_id"] != null)9 L# F* s) U6 ~0 d1 D2 C
  14.         {
    ' C# y5 }* V0 }% M, T9 a$ X& W
  15.             pr_id = Request.Cookies["pr_id"].Value;
    ; M$ D4 z& b( f+ `. B
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
    4 `) j0 j9 Y, B
  2.             context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码
还有一点需要注意的就是:
  1. /*注意顺序以及IsPostBack*/        
    3 @7 K7 @+ _! l0 F& S1 |8 P0 _
  2.         this.LoadQueryString();6 p5 [+ H, c5 V5 M5 a$ O
  3.         this.LoadUserCookie();
    % t! W' }' |1 {( Y. ~4 K
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    3 @& B1 Q# N3 z# j/ z) V- A
  5.         {
    ; N2 Y4 U: Q; n1 O( b* G
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    , v, B3 ?# {; x7 z: `; {) `
  7.             {
    , P" a2 K; r  G$ ?
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    $ ^1 z. z1 i# Y3 o6 U
  9.                 JavaScript.Alert(errMsg);
    3 B- @& x' O/ v! T" z
  10.                 this.LoadQueryString();
    2 j9 R6 M/ P# O1 n
  11.             }% E* J5 \& T7 o
  12.         }
复制代码
错误提示,并且能正常重定向页面' p( V! J- M$ r. `) e4 @
[attach]322[/attach]




欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/) Powered by Discuz! X3.2