晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑
/ @$ `1 a8 o1 _; ]9 d% L
& }/ `; V6 E- Y+ l/ p具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
( [- t4 w, J7 x4 |& ?  K添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
, E; X# ~; c5 Y: t( p
7 E" d. m* T7 I$ X- p  ]方法是正确的,而且比较好
5 h. `: K9 R2 V+ [只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。+ a9 f* @% h6 ^* l- r1 J, Y9 s
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()
    ' N* Z7 g. h3 V7 g# d$ n: z
  2.     {/ L  I0 _& _, d% q/ b
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
    $ U. }9 O( ^+ [2 [
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来, T. o" ^0 K: s( d
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/) n% `5 R( G7 M5 z, s
  6.         if (Request.QueryString["ex_id"] != null)
    ( {1 p1 h) v" d2 v. D/ H' J
  7.         {1 ?% E2 v; C+ u  T" ^; d" m3 c$ r
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);& J6 {- \; z/ n# r
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    ' S$ u$ [! {' K% ]: P
  10.             if (!Request.Browser.Cookies)0 ^% U- J5 I5 {. _7 |, K
  11.             {1 L% _, L/ u; Z2 U. w6 f( X  l/ d  j
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    " E# I9 n$ n8 D2 ?" r! H
  13.                 return;6 i+ x+ @; H( W, A5 A. U
  14.             }# _- k( k. s, y
  15.             Response.Cookies.Add(ex_id);! [. e' B3 @/ S% {+ z- T; b
  16.         }5 W6 U. V) t" h( E' Y  ?& f
  17.         if (Request.QueryString["cm_id"] != null)% E3 `+ g0 a* q( Y
  18.         {3 x& F7 V/ m! [: k
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
    ! b" F/ M. M# @" w' q
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());: H5 C' r. W, Q- s% v
  21.             if (!Request.Browser.Cookies)
    / `- e0 W& t- E& {1 G
  22.             {
    - O4 U7 V6 R  V' C5 b4 a% q
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    4 U# R+ T+ Q+ K5 N9 K/ ~4 ^
  24.                 return;
    * O2 [* [; o* k4 ?* y- m1 o
  25.             }
    5 A; y( z6 C# K. m. Z3 t$ m
  26.             Response.Cookies.Add(cm_id);
    $ O/ e- ^+ ]' |) ?
  27.         }# O( q2 ]" F) l' r
  28.         if (Request.QueryString["pr_id"] != null)$ ~0 ]5 G& m) _
  29.         {8 b. S2 G* d  K
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);) y1 ^* K) R$ M# A2 m. j
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    3 f6 n) o: _; R1 t% e
  32.             if (!Request.Browser.Cookies)
    0 r' ^: h3 }/ V$ T( v2 [
  33.             {
    * Q  V0 `; {$ ]. h$ n8 q9 g0 r
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    : U8 N0 H% i. A' J6 E2 v9 |8 p
  35.                 return;1 _1 |) A0 v$ Y3 f) D
  36.             }8 \& y2 m5 \+ E9 X
  37.             Response.Cookies.Add(pr_id);
    $ ]/ r2 g. |8 `2 v2 j$ ]( p
  38.         }: g) r. k/ P9 _( {
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的( i  j3 D6 g7 V4 S! N
  2.         string ex_id = "-1";
    / i' d1 v0 T! N4 p
  3.         string cm_id = "-1";2 }# `0 @9 `8 m  a( {+ `! \
  4.         string pr_id = "-1";4 g0 E9 h, z6 ?( ?/ J9 g6 U
  5.         if (Request.Cookies["ex_id"] != null)2 Q' r4 ]$ ?9 H! `$ ]! W3 @
  6.         {8 m; x- Q2 Z' k3 b' \
  7.             ex_id = Request.Cookies["ex_id"].Value;! X) \) \5 l6 e  v9 ~
  8.         }( o9 R0 Q4 O( ]: y" Y) A9 y+ M) r! x9 W
  9.         if (Request.Cookies["cm_id"] != null): P( \* ]4 C5 r& d
  10.         {
    % G' I' ?5 R3 a
  11.             cm_id = Request.Cookies["cm_id"].Value;9 B+ s3 J! Y8 t
  12.         }9 r2 z8 r! m: n1 C' ^$ d9 e
  13.         if (Request.Cookies["pr_id"] != null)
    , d# u  r) D9 _+ a' P: G' s
  14.         {& z& g/ [( ?1 t" e5 H
  15.             pr_id = Request.Cookies["pr_id"].Value;
    8 C5 K% @, X/ F0 h$ w
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。# l7 v1 }: x; [
  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*/        
    1 y+ {& p1 M5 l
  2.         this.LoadQueryString();
    0 o7 i) s! X% b2 ?
  3.         this.LoadUserCookie();
    4 h1 m7 v7 @1 Z# M. Q
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变* d; t/ R+ @: j* M9 s7 O1 s
  5.         {( o# k9 ?5 |) s
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"])). @5 x& S- n) n, D0 N
  7.             {
    / `8 c+ J- w- i; _# y
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);+ b) L6 p: `& ^! X$ w0 Q  d
  9.                 JavaScript.Alert(errMsg);& @, k* [# u+ B  I$ Z6 G8 F) K" m
  10.                 this.LoadQueryString();! C* c, |/ W. V1 k& E. p5 z' }
  11.             }
    ; F/ l; Y) T3 h' z9 K
  12.         }
复制代码
错误提示,并且能正常重定向页面- K1 s& ]& C' n9 u! |  M

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-15 22:37 , Processed in 6.071522 second(s), 9 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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