晨鸟科技

 找回密码
 注册
搜索
查看: 11283|回复: 0
打印 上一主题 下一主题

【体验式实践系统】上传文件大小限制、捕获大小限制异常

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑
% W* ^1 ~; q) o6 J' t9 D8 r3 m  y8 J2 i/ D4 s  Y
具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
! f7 k* Q- ^0 J, W7 A添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来! A0 |) O. |' w, ?! X1 r4 |% A
& ^3 f0 P% F0 v; p1 f  y& A9 R
方法是正确的,而且比较好
4 F) E$ V) W& z只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
1 Z1 n1 I4 b% A: c. }于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString(): N/ O; w  _3 \0 A- s
  2.     {
    ' l7 l9 N" ~6 Q
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,3 \, K, F4 e! r; T5 g7 r
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来- F, \. t0 c+ q+ o( P; `/ r
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/3 N7 Q  H$ j3 l/ p! ~  a
  6.         if (Request.QueryString["ex_id"] != null)% V- R5 |; i( o" H( C: j" V* u
  7.         {
    # N, P* r) @+ D5 z
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    . {& r: S3 y" b# A1 C/ ~. G) Y
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    . C* X. q- J  e1 u
  10.             if (!Request.Browser.Cookies)
    % q0 S, T& t/ [  a5 W
  11.             {
    ( d$ a+ H$ r( P! g6 l
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");: E1 t" q% ]8 x2 B- w% T. m8 z
  13.                 return;
    8 f3 a) r/ m5 {# g) v! I5 ~2 i
  14.             }
    % x$ Z* z# h: N
  15.             Response.Cookies.Add(ex_id);
    8 |% i, [# ~8 y" l6 c) m
  16.         }! B3 v# W. f2 s+ z. [$ M5 J6 y
  17.         if (Request.QueryString["cm_id"] != null)0 P+ n5 U6 r4 {# k: E
  18.         {
    & h! S% u( h* y  @& Q6 ~, d; \
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);9 v# F3 r4 {2 L4 b
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());* p! u2 V# r$ b: V" @
  21.             if (!Request.Browser.Cookies)
    5 i) D$ ~% X& ]7 v' d0 U
  22.             {
    2 R( _' J0 o9 ?
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    * s$ N. G" Z( ?' n' i- {* [
  24.                 return;: A5 _) L: [  R
  25.             }
    8 T; V% u* w1 q; F' ^0 \  d
  26.             Response.Cookies.Add(cm_id);
    ! V& i; q; {9 a" V# Y! W
  27.         }
    / X5 e( |0 @6 ]& U
  28.         if (Request.QueryString["pr_id"] != null)
    6 _" K3 }6 {, u" n
  29.         {0 F; Z! l1 T( H/ x
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    - U, Q+ W. y+ A1 r$ N
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());  m$ f* r& v+ @& I- Z, z' J
  32.             if (!Request.Browser.Cookies)
    / ]0 v! ]+ ?, I! u/ q
  33.             {
    9 W# f$ T$ Q- F2 u- H
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    $ Q, W0 \( x. X" Z
  35.                 return;# V+ S' f* X7 I& I8 }
  36.             }
    - u9 e* b8 O2 h" `' Z: \! U
  37.             Response.Cookies.Add(pr_id);
    % W7 B* W  f6 j7 M. F& J
  38.         }
    * U- H* `4 q* E' u
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
    ; m3 ^3 v6 V2 r0 ~3 n7 D& D1 a
  2.         string ex_id = "-1";0 J% k0 ?  u" L/ ~7 t7 k
  3.         string cm_id = "-1";
    7 s: t6 U8 a3 ?1 j
  4.         string pr_id = "-1";+ ~6 t) p9 n7 |" J6 c" F" T+ L4 M* |
  5.         if (Request.Cookies["ex_id"] != null)
    * C. `* V- {- S: m% U% v2 f6 A9 V
  6.         {
    % x; ?% R  o% h, H* V9 S1 C
  7.             ex_id = Request.Cookies["ex_id"].Value;. X$ U: [) I2 B! B0 k: ]( W2 D
  8.         }* ]5 n  X1 i0 m" V
  9.         if (Request.Cookies["cm_id"] != null)
    , b' }3 i: t! l6 x/ {4 Z
  10.         {9 e; @$ ]0 _! U1 d
  11.             cm_id = Request.Cookies["cm_id"].Value;
    ; M  C) E$ o  k$ B( I
  12.         }! N+ B# w- e4 ^
  13.         if (Request.Cookies["pr_id"] != null)2 ]$ p2 G0 c2 p, Y4 T
  14.         {( U4 j# `' V( r8 `' D
  15.             pr_id = Request.Cookies["pr_id"].Value;
    9 B( B6 n0 T) g2 Y
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。3 `) u% W+ X( \* |; c* 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*/        8 e- a" j9 H: F. Z4 {+ b* L/ P1 g7 r
  2.         this.LoadQueryString();& Z( V/ a2 Y/ v0 t  X
  3.         this.LoadUserCookie();: x3 S0 }! Q9 C* b, |
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变; ?, f' b8 n$ W3 n9 |6 L5 W
  5.         {) @' K9 `$ b9 m6 r8 k0 d  {& o
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    $ r  z( Q1 K7 Z4 Z
  7.             {( X! _1 X  y* z& [2 R3 t( _0 s' I
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    ! q, N. w6 s* J" Y6 ^
  9.                 JavaScript.Alert(errMsg);9 q3 f  [4 F8 ^5 A1 Z0 Y% x
  10.                 this.LoadQueryString();
    ' M) ~5 D4 ^/ [# ?$ h& d. y
  11.             }
    3 c6 q. B: d1 V1 X  D
  12.         }
复制代码
错误提示,并且能正常重定向页面
2 s6 }! I9 g  ~/ _% R

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|晨鸟科技 ( 沪ICP备09012675号 )

GMT+8, 2025-10-29 22:13 , Processed in 6.065663 second(s), 9 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表