晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑 0 k. {- x4 G6 c- u1 R; u

2 W  I5 G- w5 Z" H. S/ k3 p具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx' k, J% z: D0 ]
添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
8 C: P( Q* T# H4 }  p$ k8 q: U% U! s' f, `- j* P
方法是正确的,而且比较好: F* ?4 K2 }$ w
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。# C1 ]4 g- k' |* a( g& r( P
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()% q2 I, G. j) c
  2.     {
    $ [1 g7 `; v8 U( }! U7 [
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,; m2 B* |) z6 q- S! }7 P6 m
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来9 i8 F7 E2 P9 p9 Y* C2 D
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/5 u+ R4 S3 }9 }/ Z3 `0 O
  6.         if (Request.QueryString["ex_id"] != null)
    / X  z6 D3 {) x5 t8 T& }
  7.         {
    3 s, M' u9 D" v$ V: J8 s1 U  e
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    4 H5 C4 W. V% R% e0 o# `, s
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    : j7 \" m4 u( @
  10.             if (!Request.Browser.Cookies)
    , u4 V% u  f) t
  11.             {
    2 S" l5 w( h/ `* `
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");2 S9 T8 Y) l& [9 D
  13.                 return;" [; P" f/ a: J9 j' G
  14.             }
    5 u0 G0 m$ A# N, b8 q3 o% r
  15.             Response.Cookies.Add(ex_id);9 j% j; n; c" V: _2 F7 z0 a0 W
  16.         }
    2 ~5 H7 q9 L. X" n4 c
  17.         if (Request.QueryString["cm_id"] != null)
    2 W- @, k( z! X; O4 S
  18.         {8 x& n- r# O: L* b( D) R
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);  z; |# `, O( v, q+ K% s
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
    ; }% L, q( b7 o0 S" K
  21.             if (!Request.Browser.Cookies)2 S' `0 _6 B2 b, B- m. P3 A1 p: N
  22.             {
    ) c; U6 `# W5 n$ [
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    $ J) C2 ]1 M3 E, ^8 R& w" i
  24.                 return;
    $ U; }2 ~5 R) y' F. I
  25.             }
    * O) l& U1 T* z+ w5 O+ J
  26.             Response.Cookies.Add(cm_id);0 b/ [) W! S! i- b4 X# f8 {5 r/ G
  27.         }
    % Z" N) T8 Y( V1 V" N: E: y. M
  28.         if (Request.QueryString["pr_id"] != null); A/ e; K) d) t7 @3 T+ y
  29.         {
    : U9 ~/ p5 G7 H/ F
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);+ {! V( Q- Y) s' _
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    0 S0 j1 F9 G; \2 K! o1 @
  32.             if (!Request.Browser.Cookies)
    ; q8 k+ {4 `5 e; ]
  33.             {
    # z: D4 d! N! e& h# L1 r2 M/ \( o
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
      @% K- v1 ^  W) h: D* H
  35.                 return;
    8 ^: N. O% t8 o! V, x4 r0 ~3 U
  36.             }8 r3 q/ o5 H, I0 Y0 \+ W
  37.             Response.Cookies.Add(pr_id);
    7 o. ~( U) A5 Z( K7 A
  38.         }
    3 j4 W9 U& ]0 d+ k3 N$ u+ t
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的# r  f8 P% y; Z( W
  2.         string ex_id = "-1";
    : M; H4 {& \) f& A" l& K# _9 {8 I
  3.         string cm_id = "-1";# |4 W- i# V1 I# l7 R
  4.         string pr_id = "-1";  A  D7 P" u+ x$ B; m! Q3 o
  5.         if (Request.Cookies["ex_id"] != null)
    + @4 W& D3 {: k1 v1 x
  6.         {
    ; {# U- q1 C! u- e. t7 ^7 x2 B7 g/ Q
  7.             ex_id = Request.Cookies["ex_id"].Value;, p8 O: d! k; \' G+ M
  8.         }: }8 t+ I' r; d( w6 d
  9.         if (Request.Cookies["cm_id"] != null)( D+ d( Z5 [/ r6 b: O  `4 ]
  10.         {
    & |# n1 [- ?3 H
  11.             cm_id = Request.Cookies["cm_id"].Value;
    - ^- R* g$ l& G. k
  12.         }
    ) t  t6 |/ B' j( i- ^
  13.         if (Request.Cookies["pr_id"] != null)8 t3 E1 _6 J; {3 U$ ~/ L
  14.         {
    # v: D7 w$ n) u8 f+ F8 A/ \* Y
  15.             pr_id = Request.Cookies["pr_id"].Value;
    6 ~# Q" U  u, ], l) T* J" O# ]6 E
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。; b  b5 W# B% ]. S
  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*/        # G0 a3 Y' [1 |! V) l+ _: ^
  2.         this.LoadQueryString();" n% {' r  E3 t8 X0 z: r; J
  3.         this.LoadUserCookie();+ H' p/ ^; Y: e" I: E! S, P
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变+ Z, f, j& ?5 b( D( k- x5 t6 ]3 T& R
  5.         {# i+ i4 a8 S# i  P- W: _
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))$ Z7 @7 h6 n7 h" \( {6 Q) e% h
  7.             {: g# E, u4 q* D- \
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    ( V' q  F) E; j6 D2 Y& a5 A$ |; h8 l0 W
  9.                 JavaScript.Alert(errMsg);& n/ h# K. o& z- R! j( l
  10.                 this.LoadQueryString();
    9 L. P7 @2 _3 [, B* x
  11.             }
    ; v1 u4 S! P- a1 R6 G( x8 r8 x
  12.         }
复制代码
错误提示,并且能正常重定向页面
" {2 Y& N& S$ e, S

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-8-13 20:56 , Processed in 6.076759 second(s), 9 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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