晨鸟科技

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

作者: Star    时间: 2010-12-16 18:44
标题: 【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑
1 @. {# E2 y7 F, K- d- m# j" n
, _* ?/ m, w) ?9 @; a/ }具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
( Q" ^: I0 M, |" A添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来+ b, S8 X% G- _1 T
+ A* M: y  \2 m- _; r- S  I4 `
方法是正确的,而且比较好# Z* Q3 P3 R1 Y* [+ o+ \" u
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
0 r1 M$ o* c1 k7 W$ U于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString(); A9 G- R1 W- K& Y) w5 j. v' m
  2.     {3 b: m3 V' @, }5 P
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,0 u6 G8 q4 x# e! D
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来- N4 U' ~5 |. m4 C+ r2 s' p
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
    6 |$ p5 \% [7 ?% v
  6.         if (Request.QueryString["ex_id"] != null)
    9 B* Y6 t$ Q+ D7 n
  7.         {) ]+ ~+ z7 s( v; t' ?; g4 o  J
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
      A3 Q  G% d: O; J( S2 Z
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());' `, y& T2 V' L; b$ d  Y
  10.             if (!Request.Browser.Cookies)
    4 i+ j; T( U! X% `* S, _
  11.             {
    ' b+ q/ l( y' r, c( a
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");# }5 G7 ^- b+ C5 r- J
  13.                 return;% y* e9 I. x4 n5 \. n% r
  14.             }
    9 G) W. l; P# u3 A4 N) k) O. l
  15.             Response.Cookies.Add(ex_id);
    % G6 C% }. t  e( s
  16.         }
    ! X, u) v( M' n+ T+ O# [
  17.         if (Request.QueryString["cm_id"] != null), n3 `% f! F' K) a' T( h
  18.         {
    , |8 \5 S6 a. k5 @
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
    . u+ {: V% D) g
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
    % k% O( \" O: A" Z; O7 Y4 {
  21.             if (!Request.Browser.Cookies)% |/ E# Z  y) c  @: k
  22.             {! @9 G& s, q  \) u) |' }
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");4 k- \" u# G# ]* A) e' G
  24.                 return;
    * i& i/ ^: I; Z: q* v! w) K
  25.             }
    9 X; ?$ K, f9 s! ]
  26.             Response.Cookies.Add(cm_id);
      h/ D3 L8 O, F( T0 W/ T9 S
  27.         }4 _8 V7 ^# x' R+ D, J1 N! Q
  28.         if (Request.QueryString["pr_id"] != null)
    * M3 ]# ]% ?' i
  29.         {
    5 l8 V( N) U' Z9 k5 t) z( c
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    0 ^6 z/ k% H  ]- ^/ w3 g
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    1 ]0 F8 X4 F' S  t
  32.             if (!Request.Browser.Cookies). t' k' J5 A, o- ]
  33.             {
    / p$ c4 |: n, a( R
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");- A+ j! `. @6 m
  35.                 return;
    * x* n8 N' |: h( W, s9 _
  36.             }
    7 w" r# E+ b3 W+ K& m# i6 r$ i
  37.             Response.Cookies.Add(pr_id);
    8 j* a6 f- ?( q, v1 |9 F
  38.         }- h5 D) O( a% f6 b' i: f  v
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的% ]0 t  i+ E# k8 C
  2.         string ex_id = "-1";
    7 w' P# [- d1 H; v5 w
  3.         string cm_id = "-1";
    ! Y" f0 d$ ?5 \  \8 |: t
  4.         string pr_id = "-1";% `5 [! F4 C/ D; a6 _1 k: ?$ v
  5.         if (Request.Cookies["ex_id"] != null)% z6 p9 B$ @! e% W
  6.         {
    - U8 A2 o* t1 q( |
  7.             ex_id = Request.Cookies["ex_id"].Value;
    ! T6 r0 [  A' l( ^0 z+ p
  8.         }0 o7 o/ C+ v. ?. \4 G
  9.         if (Request.Cookies["cm_id"] != null)
    8 l9 K% ^$ r8 |* m
  10.         {4 A8 I1 k) Z% `5 g1 Y% f! `; m
  11.             cm_id = Request.Cookies["cm_id"].Value;3 X6 y% t' h/ i* ^8 x0 M
  12.         }$ S! M1 e! ~/ ]% F; `/ h5 Y" p
  13.         if (Request.Cookies["pr_id"] != null)# N1 F( x( h' n. m( }2 v
  14.         {
    ( e$ J" w! B" Z. U  D
  15.             pr_id = Request.Cookies["pr_id"].Value;; S( x: v0 w. x' I; R0 s
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。4 a& ^8 p! T- f/ g; f1 K2 E
  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*/        ( u$ x* w- m2 y' j8 g0 u, u6 `
  2.         this.LoadQueryString();
    ! w6 v1 q& q5 X# u  c2 B/ z& K
  3.         this.LoadUserCookie();
    6 [, b; s+ P. M8 G' @& r+ |  n! u
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    # w, U! G: T! [5 Y1 l* p. o6 U, u3 v
  5.         {5 \* f6 M) d- \  O* l/ Y, _/ e
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    8 d$ m5 m+ X" T" l/ @, t
  7.             {. z1 S, q7 B8 g
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    , \  f/ s3 r- \* D
  9.                 JavaScript.Alert(errMsg);
    4 @9 o7 n* b# U  |2 f
  10.                 this.LoadQueryString();  t7 [4 D% L- a
  11.             }0 R0 X- Y0 S; }2 c: E% Y! Z3 o, ^
  12.         }
复制代码
错误提示,并且能正常重定向页面
2 D& G+ |" t# L, Z[attach]322[/attach]




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