晨鸟科技

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

作者: Star    时间: 2010-12-16 18:44
标题: 【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑
$ k0 D3 Z: j" y( I! o) I3 b. [
4 |6 l/ j8 [0 y# E/ @8 d具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx; ^" [4 o5 q* ~8 [2 V  ^  D
添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来# _; {0 o8 u" k/ p) _  z

1 g1 ~1 F) M& s) p' c方法是正确的,而且比较好" A2 q, P0 G, ~
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
2 J, |+ l8 ?1 l  W$ g  S于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()
    3 t* E! ]  z- W2 C! j
  2.     {
    ! W6 m$ ^! ^0 O1 T! ~- D
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,: b1 A9 u8 R3 y7 L4 G
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来# f- D, t3 |3 T7 Y
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/5 C/ _& G+ k) e1 z) s
  6.         if (Request.QueryString["ex_id"] != null)+ |* p; ?9 H1 d$ ]6 z
  7.         {" W* U. S7 N9 h( I
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    6 V9 m; c( j3 E; p2 F$ {8 n2 q
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());' s6 N2 R$ n8 I2 B' x
  10.             if (!Request.Browser.Cookies)3 b- N" k: W4 e$ {- G4 e; l2 |; ^
  11.             {" g, q6 R& m6 ~7 v
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");$ B' z% ^. e4 J, Y- ]( M3 i
  13.                 return;: }9 d0 B' c9 y5 ]  F
  14.             }) c- P. J" m  a
  15.             Response.Cookies.Add(ex_id);
    8 k+ c; H. g9 j+ J2 ?
  16.         }
    & @' @! n% b) d) @! C" ?8 z1 ~* Q- [5 T  p
  17.         if (Request.QueryString["cm_id"] != null)
    : `/ A2 H( j- ~3 I
  18.         {
    6 q9 N9 [3 e% @, Q! _
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
    6 H) U* I8 p' j) O7 G9 M: a7 k8 q
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());" c6 ~1 J5 U; h0 q: G
  21.             if (!Request.Browser.Cookies)
    " O0 r# F4 r! C& F% [" F2 V( b1 V" E
  22.             {+ r/ x! C( e3 M9 W1 {" H7 ?
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    0 `1 _: h% j1 W% \0 X
  24.                 return;: h$ d6 d; `$ B+ v( [0 U
  25.             }5 j# ?, A# Z* {; K; z9 |% U% E
  26.             Response.Cookies.Add(cm_id);
    & P  ~5 |' m' h4 C# [' A. P0 m
  27.         }! U: x) O$ W; Z$ Y. Q) }3 o- P4 }
  28.         if (Request.QueryString["pr_id"] != null)
    ; u- W& p" ?9 l( M
  29.         {* {9 [2 e3 g, `  {- c
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    ) Y5 Y( m" e4 g" }1 v
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());5 T! `( @$ Y9 O
  32.             if (!Request.Browser.Cookies)6 j! }' _; L8 I" q2 P# _% u! L* t
  33.             {, b  X& D& Y- e( M7 z0 `
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");+ |% [2 n2 s) y5 V% b3 m
  35.                 return;% Z! n, g# o, q" D
  36.             }# O) c! A5 j% i! v6 Q7 E0 F% a! r
  37.             Response.Cookies.Add(pr_id);8 ~% t, `2 b5 u/ c! x3 `4 O
  38.         }. q0 O  W+ F; S1 S0 H+ f5 n
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
    & c' L2 Q6 o& w3 ~0 B) r, j- ?
  2.         string ex_id = "-1";& a4 }! H+ x/ A' s/ ^
  3.         string cm_id = "-1";/ N) d6 S2 r7 R$ T" {! J$ c9 f
  4.         string pr_id = "-1";! A$ B0 }$ L. c  k( B$ ^+ m% M: f
  5.         if (Request.Cookies["ex_id"] != null)  K% g5 b# z2 x: w! u/ Y! p
  6.         {! t, Y! g0 |3 X4 R+ E
  7.             ex_id = Request.Cookies["ex_id"].Value;
    $ m0 p2 X9 i# c5 Q/ j1 A
  8.         }
    $ R' t1 O. m, F/ g$ q
  9.         if (Request.Cookies["cm_id"] != null)+ S( X  d' U$ h
  10.         {
    0 D2 s# ^& x0 B/ b7 `& J8 C% o
  11.             cm_id = Request.Cookies["cm_id"].Value;) c; @+ @, z' U4 z/ N+ v
  12.         }
    : U7 x9 J- x& z3 y
  13.         if (Request.Cookies["pr_id"] != null)! B7 ]7 _0 T2 C! |) b, J0 a
  14.         {
    3 R: u) k( Z  ]+ |
  15.             pr_id = Request.Cookies["pr_id"].Value;
    ( u' f) J$ E8 W+ W) h) e% h
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
    4 [; p: r, m  j, p( y+ j2 A
  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*/        
    4 @9 x. A4 T. x/ q+ q) t
  2.         this.LoadQueryString();
    ( k% Q$ j) J1 l! A3 H
  3.         this.LoadUserCookie();
    - P" g  \7 q- M
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    6 f0 [/ @0 C; {/ p4 `( G
  5.         {1 y/ _1 R1 Q( }  _9 Y+ B
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    ) _4 }. F) i+ m
  7.             {
    6 u/ h) B3 u6 t; N
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);( x2 }% a& ^4 Z# {5 I  G
  9.                 JavaScript.Alert(errMsg);
    * a) e' C+ F2 F/ A
  10.                 this.LoadQueryString();4 {% M/ D9 O) F0 d6 M- O
  11.             }
    " k$ W" q; l6 P  j* v! D. R
  12.         }
复制代码
错误提示,并且能正常重定向页面, ]! ]2 X% M4 s' r7 q
[attach]322[/attach]




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