晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑 1 l8 A) b3 h' F
5 a% G) g# o. u: ?5 m" ~
具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx+ o' P5 P9 o1 k/ w. Y7 I; c
添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
- Z0 Z( M0 N9 D: Q/ R0 Y) ]
9 ^9 g9 G- K: P. ~" @3 L% L方法是正确的,而且比较好( B+ N# p3 N! I2 a
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
- S- J. L3 N8 l1 M, }' ^于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()
    6 v6 K$ j5 p, W/ U5 m! q$ i
  2.     {5 `1 E" n. I1 J8 j  h4 W7 c5 q
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,. F+ v, o; O% ]8 F
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来1 A1 D: E- Y, ^' }/ k4 a
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/8 s# Z' Y. d" d& E# K9 h+ ^4 `# n
  6.         if (Request.QueryString["ex_id"] != null)
    0 K0 l& c/ ?" q. k" I0 M
  7.         {
    4 j' }, c- C' O+ Z0 R) {5 _
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    ; b0 j4 ~0 l8 ~5 U* d% K5 M  b/ d" k& z
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    7 d' i' l1 |. [% S$ a
  10.             if (!Request.Browser.Cookies)
    6 T7 W; X2 ]4 w3 d5 [0 |2 X
  11.             {
    ; S( O3 k. `2 a
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");) e  U  r" n) N$ z; T( J" u
  13.                 return;
    5 U8 _" j$ l5 ?6 e9 P2 |: h  g4 H
  14.             }  U9 L: p0 z& f
  15.             Response.Cookies.Add(ex_id);& f+ F7 K4 C; o- O
  16.         }
    ; y5 e" s$ d: |. N7 W7 S5 n& t
  17.         if (Request.QueryString["cm_id"] != null)
      M" }9 s# C; N0 Y$ E0 @: q
  18.         {
    5 n# R  q0 J1 _1 @
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
      z! U9 u. j1 i1 y" F8 M1 t* p6 q
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());/ _, |. }! T: z+ ?! @
  21.             if (!Request.Browser.Cookies)3 J3 G7 ?1 k! f% K
  22.             {2 I: X( B# Y/ ~3 o$ {' Q. n
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    $ M; i) C4 k' ~/ E+ Z) p
  24.                 return;
    7 O2 ~+ \$ `" U4 }" f
  25.             }
    ) b  w( X$ s4 L( x0 j
  26.             Response.Cookies.Add(cm_id);
    6 [5 o& e8 L) b& L  [0 B; \
  27.         }+ I- n' s! q% l( d2 G% e+ V
  28.         if (Request.QueryString["pr_id"] != null)
    5 E  t# \- C5 H& ^
  29.         {1 A% k1 ^3 D* B. h$ u
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);# D8 O( s! s; @; z9 x. a
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());& ]/ F- J( l. f' ], g
  32.             if (!Request.Browser.Cookies)
    / k# r; p0 ?$ n
  33.             {
    : x. E2 x9 F* ~8 l! F
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");5 }5 h$ Y/ M, n% y' q, l
  35.                 return;% W1 x, {) S, `$ x: e
  36.             }8 }+ B  P! t! f
  37.             Response.Cookies.Add(pr_id);
    % Z* u1 ?" F2 r" s5 a
  38.         }
    ( d4 G* s8 x1 R5 }& L3 I; ?
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的, k6 u  D. K* D" Q$ u1 y/ T' [
  2.         string ex_id = "-1";- x- A2 B0 `  S1 p
  3.         string cm_id = "-1";
      M8 R6 d- F0 O; s
  4.         string pr_id = "-1";
    ' L+ J8 F; q$ G, y3 l
  5.         if (Request.Cookies["ex_id"] != null)$ `3 m( v9 \4 `* d' y
  6.         {$ b5 B* @# d; N1 M
  7.             ex_id = Request.Cookies["ex_id"].Value;
    2 J, j3 h" g$ J/ a  q8 n7 m2 b, o+ q. \
  8.         }9 O, T+ H9 X8 {
  9.         if (Request.Cookies["cm_id"] != null)' D, v: |* ^/ ]; S" V! j" s/ P
  10.         {
    / u0 k% s8 F9 a0 ?, W8 m/ [2 H
  11.             cm_id = Request.Cookies["cm_id"].Value;- O1 }, i9 f" M/ `
  12.         }) r- M' t# |( H7 i& R/ m
  13.         if (Request.Cookies["pr_id"] != null)
    5 Q" m- \1 `2 f
  14.         {
    ) n2 Y1 j) y% y# g- ?% N
  15.             pr_id = Request.Cookies["pr_id"].Value;5 F( V/ a; m, A
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。7 ~# i$ w6 g4 k5 {0 h  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*/        / e; r  Y* N2 v$ q# e+ j+ f
  2.         this.LoadQueryString();- y/ |$ Y# \- p0 ~
  3.         this.LoadUserCookie();
      ]3 g( r6 q% F! r& K' L" e
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变7 F4 f- F# X3 ~: k* V
  5.         {' j+ i2 ?7 `# u/ L: K; ^
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    % R. W& {4 w% B% u
  7.             {% F9 P/ c! n7 S+ t# s0 S8 i7 h
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    - C$ P$ Z$ S: y/ D9 i# c
  9.                 JavaScript.Alert(errMsg);
    ) R) b0 N9 F+ T8 @6 }$ B: n- Z
  10.                 this.LoadQueryString();
      I+ `6 Q: t9 k& ]& j
  11.             }8 E% N" [4 I0 T2 P( w
  12.         }
复制代码
错误提示,并且能正常重定向页面
% f9 ]  K) V0 ]& o. d  @" O

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-5 08:15 , Processed in 6.072853 second(s), 9 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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