晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑 3 B' ~* c) Z. K% W" ]) w- K

- y1 G$ ]  p: B1 P具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
9 O0 X. p5 O% I5 w% p添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
; }5 w( C  H! L3 q4 b) \
! w: \5 f0 @( E& _方法是正确的,而且比较好! L5 E! Q6 A, }* H2 t# a
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。  S) w6 V4 q3 P% m$ P; I9 U
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()
    ; z* B4 g0 [! D/ I, l
  2.     {
    2 A! I3 U( x$ b
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,: g& S& u& ~4 j' ]: R
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
    9 h1 t( k( b) h& |' N1 c* v; T6 h7 L
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/7 w+ j- \  G$ x" R
  6.         if (Request.QueryString["ex_id"] != null)) Q; A7 E7 u9 X9 G  Q' O$ _
  7.         {% R; E! ^" q; Y* v" p+ h
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);/ |) U) C+ a$ E/ O
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    4 v9 R5 w9 |$ T$ _
  10.             if (!Request.Browser.Cookies)9 t+ w3 i& T; t
  11.             {- o) f& Z1 z2 [5 x! N. C
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");' L) Y" Q4 g& v* V" w
  13.                 return;
    ; U4 o, o0 K5 A5 u/ q( r  b. s" r1 A
  14.             }* u2 a0 p/ D6 N5 r5 \& L8 M0 @
  15.             Response.Cookies.Add(ex_id);
    , |4 d7 R/ q+ J# O. O
  16.         }
    9 f! ^/ [! b  i
  17.         if (Request.QueryString["cm_id"] != null)
    2 H" P( }- T3 I& U
  18.         {! {% h7 d5 E& Z9 E" J  d/ Z4 _
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);: J: J* f5 T3 q* W% K, B) k% p
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());% P* M- }0 U/ j9 g' S, A
  21.             if (!Request.Browser.Cookies)5 i9 h5 c$ g- Z9 i" E6 R
  22.             {7 |9 }8 W9 ]- y, [- Z0 R. Y( k) y
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");1 L) p  K9 O" k; R& A* T+ {
  24.                 return;1 ]% N& C+ \9 L
  25.             }% ]5 w9 o8 y/ r; r
  26.             Response.Cookies.Add(cm_id);
    ! u+ c* u3 T. t1 n' n+ K
  27.         }
    $ M- {- P; U- C- z3 X, f$ o
  28.         if (Request.QueryString["pr_id"] != null). Q/ V' ]. x( g' k
  29.         {% |; o& S. u8 w1 K4 A, ]
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);/ n& \1 u9 E3 {1 ^  w: Y/ Y
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    ; {/ I/ U# ^( v/ W# M0 V6 B* s1 O
  32.             if (!Request.Browser.Cookies)
    ! _# D5 u* [, V: M8 ~" m7 f' O$ T
  33.             {9 ]  J/ s* J  w2 C
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");% O) I! f$ d8 e5 P5 j" ?
  35.                 return;: C, i! C9 [" D4 U3 `# c
  36.             }
    + p8 ^0 O% l# x4 n- f
  37.             Response.Cookies.Add(pr_id);
    8 S* p& l. N' J/ ]; _: ?
  38.         }
    : f  `1 i+ h9 F2 E+ w* ]
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的( f# v# C" a  C" A1 \0 d
  2.         string ex_id = "-1";7 `1 K7 F9 d, M* E, C/ L' M" ?
  3.         string cm_id = "-1";
    ( G! M7 q! L9 W6 m
  4.         string pr_id = "-1";
    : B* Y% F  [2 y2 x
  5.         if (Request.Cookies["ex_id"] != null)9 v3 t# k# N6 z
  6.         {
    $ ^9 M* t+ f, h* ]$ ]& |
  7.             ex_id = Request.Cookies["ex_id"].Value;
    , t: B: R- a9 P' d4 J
  8.         }0 b$ b% l  s  S3 h
  9.         if (Request.Cookies["cm_id"] != null)
    ) N" k2 \3 {; r0 N) O* K) i# P
  10.         {/ |6 R  H: F: T+ a# n0 G
  11.             cm_id = Request.Cookies["cm_id"].Value;
    4 e. ?6 n; V5 q$ |+ ^
  12.         }
    ! h/ _# R5 S+ }/ _0 o3 Y
  13.         if (Request.Cookies["pr_id"] != null)2 V- g# l3 M) @2 F
  14.         {
    1 A5 p+ c4 R) B
  15.             pr_id = Request.Cookies["pr_id"].Value;1 u# B" `3 d* b  p  }
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
    1 L; Q2 A+ ]4 [' L1 Y) l; _6 T
  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*/        
    & K* Y2 P+ {- k( p
  2.         this.LoadQueryString();
    8 x  I9 x/ m5 E% U. Y
  3.         this.LoadUserCookie();
    , P: V6 \" e9 t; t
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变- x7 w$ F) r+ E9 ~; E+ ]# N
  5.         {; K' \+ T8 H- z& F! Z! p0 B8 e
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    8 N0 u, D0 g$ p9 f
  7.             {
      g9 [5 @( i& N
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);9 N* _) @  C9 P& z
  9.                 JavaScript.Alert(errMsg);
    " \4 U' q. N/ C- J/ M
  10.                 this.LoadQueryString();
    6 n4 D9 B- \5 U) N
  11.             }
    6 K# `) f. Q: H* _
  12.         }
复制代码
错误提示,并且能正常重定向页面
. K# H9 f* t& g1 [5 d4 k

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-10-30 01:59 , Processed in 6.069924 second(s), 9 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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