晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑 4 e# P& w0 @$ f) c7 z

) B% `# G( w2 ^7 a: h具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx3 [9 A& {. Y6 s8 K7 l
添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
$ j3 v/ q2 G( p/ b- f' t. }" B8 K. h) Y4 j& H6 x/ M
方法是正确的,而且比较好) u% C( _+ N8 r; ~/ I" X5 u
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。% D) T' E' {7 h8 E, B9 k
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()1 S2 s' w( S0 B" f8 B
  2.     {
    0 b6 g' i9 l* c0 Z
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
    : w" w2 C& D3 l3 Q5 B! t
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
    ) \1 z& L) l  L- r6 ]& X$ f
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/: d8 S- s" [$ p0 M0 R, ?: Z
  6.         if (Request.QueryString["ex_id"] != null)
    9 L( _( R3 E6 [6 x* G6 ^
  7.         {: a0 |" d$ n% c2 S% s# k, \
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    ; m; a/ S, A7 e3 h
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    % E* F/ d9 p$ J0 z
  10.             if (!Request.Browser.Cookies)! ?/ T$ n& S  F. s: u% l$ d3 k- ]
  11.             {
    0 T! N8 N: w, I; r
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");) V2 W" N) [* \5 i8 Q4 w- e
  13.                 return;
      c; f+ m9 o  k" ]
  14.             }
    1 e. V1 h" \) T. r4 }) y) O  }5 [
  15.             Response.Cookies.Add(ex_id);
    ; R( Q8 l6 t4 Q
  16.         }
    7 F+ j+ o5 E# N3 j' o
  17.         if (Request.QueryString["cm_id"] != null)
    * ]3 ]: J  |* Y& D* h4 W* |
  18.         {" [! x& l* U* w1 F4 f- ?9 V: a
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);. Q5 v/ F/ U- P* t0 W8 R9 N" {9 W3 {
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());" {7 y, \! u1 z" l7 H
  21.             if (!Request.Browser.Cookies)
    3 Y2 t) j$ t8 X1 c% y
  22.             {
      n+ l  o# S0 b- W7 J$ n6 s5 ?
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    ) m+ q1 p+ i  J
  24.                 return;2 U8 m8 K$ Q' x
  25.             }; n; @: ^' g( X, b4 r
  26.             Response.Cookies.Add(cm_id);3 }: y, G, X( U1 T: J8 G# w
  27.         }
    . G# h0 y, R9 p# |0 a& O' o* [
  28.         if (Request.QueryString["pr_id"] != null)
    0 M6 Y0 A/ @1 V
  29.         {
    $ _5 R+ t2 k3 L' J# K7 ]+ v- z- ?
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    ) r" @+ i6 S0 V* l" O6 ?' r( r4 t
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());# _' Z8 M+ |$ D4 {1 f% a& u
  32.             if (!Request.Browser.Cookies)1 ~7 v# Q3 C( o- ?: d. t4 ^7 D' ~
  33.             {
    7 d6 D9 W5 t5 r
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");4 v& H( @! t( n7 u
  35.                 return;8 M0 i6 C% i2 ]$ Q
  36.             }
    # s5 T- y+ c  a6 D" q, F8 Y
  37.             Response.Cookies.Add(pr_id);
    5 x; `) o! J( y# \! F# a8 C8 V
  38.         }& D5 n! n# V5 i2 m. z5 I5 D% }
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的4 M" {: Z: c+ N( j. M8 T
  2.         string ex_id = "-1";4 q0 W7 `/ Z, I* c" k3 \
  3.         string cm_id = "-1";
    : g# u" Y) {9 U: `( i' a
  4.         string pr_id = "-1";. h! l7 }/ P8 k! j: u  k/ q
  5.         if (Request.Cookies["ex_id"] != null)# T- }4 ?$ f2 @, G3 m: U; D
  6.         {+ e8 |/ n3 K/ ?
  7.             ex_id = Request.Cookies["ex_id"].Value;- r) Q$ G/ c  V) |& j7 {+ M) t
  8.         }# {* D6 `, E3 n; j; A/ u  C
  9.         if (Request.Cookies["cm_id"] != null)
    9 c  S1 P+ ?  i" V( ?2 O" V
  10.         {2 [  t$ V# o% N6 h& B
  11.             cm_id = Request.Cookies["cm_id"].Value;0 k- i! u! U, M5 R
  12.         }
    7 e# h. i# n. {" {
  13.         if (Request.Cookies["pr_id"] != null)
    : U9 Q! G- }4 Y+ \5 k- n
  14.         {$ ]$ P& i1 }$ m- x. ^! d
  15.             pr_id = Request.Cookies["pr_id"].Value;
    5 j( l- r; _" G6 ~) L
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。: H0 r8 K, {* n4 `
  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*/        
    2 [4 v  K9 L" B7 v: N" a8 n
  2.         this.LoadQueryString();1 R; W; b7 G1 X" N2 {
  3.         this.LoadUserCookie();
    5 n' g9 b! B* [7 e
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    " E8 \- ^& T( r/ M
  5.         {4 j4 J! P6 g6 w/ c( C
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))  Z" C) y' r8 `/ N2 f( Q
  7.             {
    + t' s" A; U, N; O
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);2 |( a8 m1 T& ]( b6 Z7 c6 [# e
  9.                 JavaScript.Alert(errMsg);
    , j6 t. w4 S+ g4 o3 ^! ?
  10.                 this.LoadQueryString();* n; I: d  `3 N4 R3 i2 v
  11.             }
    , _+ J  n4 C$ _/ F8 K8 V! V$ o
  12.         }
复制代码
错误提示,并且能正常重定向页面
/ B8 C- |+ K3 x% ~/ O6 e7 i) \+ x

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-15 05:13 , Processed in 6.071877 second(s), 8 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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