晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑
( n7 g1 g% h. k, \
5 t% T# X* c: Z. I" k1 e  w# n4 I具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
! w( k% a0 k: z6 p添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来3 R- a7 F! i0 q

" G0 t. Q9 E& s方法是正确的,而且比较好0 O& v9 ^( R; M  g4 V( I3 L8 O
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。& }# q$ `" [$ D& f' v* I
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()  C/ u8 u% o( r% N5 M, P% X" J0 z
  2.     {- S  G# i/ p8 s( J$ e0 w% f
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,) G. |, ^8 r- [& r6 v2 X& x' m
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来! ~2 N9 H9 K8 K- l
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
    ) n  J. M6 C0 U+ s/ }
  6.         if (Request.QueryString["ex_id"] != null)( M5 X! A; g. A. S
  7.         {
    ' }! G: t5 R0 }1 K  H/ d+ Y
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);: G- r$ a; c% T$ X8 t
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    # ^0 U9 v% P' i* i) O2 X
  10.             if (!Request.Browser.Cookies)
    ) l- x4 P5 ~; F/ O( j9 D
  11.             {
    7 d% N  g5 j3 w" w, k3 r) m
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");. N( J$ y8 e, z" V2 \8 e4 a
  13.                 return;
    ' `% a$ f' o( n/ f, \4 k; n: k
  14.             }! {8 I- P4 W/ r. o7 C
  15.             Response.Cookies.Add(ex_id);
    6 r9 e( T8 w+ l  ^8 |
  16.         }+ ^. L$ \/ ?' C$ w6 Y& e( l
  17.         if (Request.QueryString["cm_id"] != null)  [0 W$ _+ p9 p7 d5 v
  18.         {+ |, y6 P& Q/ Y% |  `
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);/ K8 t( ?5 @# U  T7 ?
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
    9 t' k9 K8 p% M( ~8 k% o
  21.             if (!Request.Browser.Cookies)
      W: M* Z: V! F5 l; z+ B1 }
  22.             {6 i6 N3 `5 |" e6 I  u8 G2 P4 t& A9 z
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");0 u  O$ l9 P+ s2 P$ V- N6 y9 W# C
  24.                 return;- t. ^* y; b- v
  25.             }1 P8 M$ D! e- Y% I1 G0 n9 F
  26.             Response.Cookies.Add(cm_id);" d6 |, ^, Q+ g; T- ?
  27.         }' S0 z3 X/ B7 I
  28.         if (Request.QueryString["pr_id"] != null)
    ) U+ T8 h3 t& X9 o; \# u4 J+ y! A: l
  29.         {/ N7 K* I' M, K
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);3 l7 l/ S. Y$ V  E
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    + ?* c9 {( ^. h7 z
  32.             if (!Request.Browser.Cookies)
    ! e! z. {8 N  s% g) E7 i# l
  33.             {
    ) g9 A- r' m3 P1 ?6 Z' }
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    # ?6 X4 P4 \" y' U3 c; o! _4 h/ d
  35.                 return;
    , ~/ \& e7 q& ~% b
  36.             }0 D8 z0 Q* l8 Z# P9 U$ H! q
  37.             Response.Cookies.Add(pr_id);
    ' T7 K6 @6 u( G$ J  Z
  38.         }
    ) u3 m0 S" c% L2 @) S
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
    2 e: m6 F& }0 d1 @3 N
  2.         string ex_id = "-1";
    2 k$ {7 Y3 F) l% {1 U" x
  3.         string cm_id = "-1";8 r6 N/ ]2 j' c3 F" j
  4.         string pr_id = "-1";8 H, Y+ \! m3 _3 J2 g
  5.         if (Request.Cookies["ex_id"] != null)  Y. }8 f$ l/ E  k, k" ?2 ?
  6.         {0 z$ O  r. B% [! n( p
  7.             ex_id = Request.Cookies["ex_id"].Value;
      m$ e0 s% f, q; Z& Y; W
  8.         }$ m" I$ A" X% V' ]
  9.         if (Request.Cookies["cm_id"] != null)
    " `" e$ a! g( P) F6 `9 J$ P+ j
  10.         {  }2 G* B$ z6 _. H4 r
  11.             cm_id = Request.Cookies["cm_id"].Value;
    ) n9 u7 W& g9 p' C1 C- o: _4 Y( p
  12.         }
    : a% F& Y3 W7 h( k' s  \6 r
  13.         if (Request.Cookies["pr_id"] != null)
    , L% ~. t: _, z" O
  14.         {4 r9 Z7 L* y: z/ J: H
  15.             pr_id = Request.Cookies["pr_id"].Value;
    2 O" T, d: G% ~' t/ Y
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
    $ l9 W% u* m8 P6 J7 R% Y6 ^; G
  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*/        3 m" k* e# \& x& K4 B0 P
  2.         this.LoadQueryString();
    9 j+ j4 j! W. H( ]) \
  3.         this.LoadUserCookie();
    ( j" ]0 j8 V% m+ T0 A2 f8 X  p
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    1 p& E- q; u: Q! ^4 l- C7 B( m
  5.         {9 }+ J$ P1 F1 E: d
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))9 k% c5 Z% I9 J" [& A* S
  7.             {: T( x$ A, i# U) F
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);& Q( S/ |* p  t* q& d
  9.                 JavaScript.Alert(errMsg);
    " x! C* \: W* F0 ?4 N
  10.                 this.LoadQueryString();5 g* a" `* A: c6 E7 ~3 V
  11.             }" T. S, E$ E7 I* A3 M4 o% Q
  12.         }
复制代码
错误提示,并且能正常重定向页面( J8 f/ l+ L' _1 ?* ^

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-12-14 18:17 , Processed in 6.066995 second(s), 8 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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