晨鸟科技

 找回密码
 注册
帖子
查看: 10227|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑
) `/ j) `. U6 I$ y- C
. N* q1 l; _  p3 j: b: G, k3 X具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
4 q$ r; v8 Q" N1 Z5 B! r+ v添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
& Q7 G9 i% f, V9 O/ h' Z! p* |1 t$ a8 Q& ^+ r' d
方法是正确的,而且比较好3 s/ |% ]5 @2 w/ A. ^
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。6 ]9 d0 _  |! [* k
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()2 e, f9 B9 w+ j! r7 H" g
  2.     {9 u. d$ b6 {9 Y/ \; ^
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,% r/ S$ f- i# y0 K" k9 N2 A4 ~
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来4 j9 M1 a4 m) X- D9 h- I* f
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
    3 s$ r2 I5 Q2 `7 r, X6 A- c% a
  6.         if (Request.QueryString["ex_id"] != null)
    ) w, f& q* L8 a/ i* Z1 J) O+ |
  7.         {
    # |# F2 T1 L# z$ f0 L7 {
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    # q8 s( V9 W/ |
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    / k; ]" M- I; u7 u' R
  10.             if (!Request.Browser.Cookies)( {$ T* b3 X0 u
  11.             {# P9 f) I; l4 L4 R8 P  a
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");% y- A+ O! @+ W0 M1 c" X4 l% q
  13.                 return;
    . _/ g5 r* y" Q7 Y6 ^2 J% I
  14.             }8 p2 q: ^0 g" U# F7 u) i
  15.             Response.Cookies.Add(ex_id);. H3 |% F1 A/ X5 o" b
  16.         }1 G+ P: D7 D9 t# O
  17.         if (Request.QueryString["cm_id"] != null)
    4 ?8 R7 y- v6 J) C% G/ B% u) ^
  18.         {
    5 T: f# s5 u; i+ N$ Q+ `
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);0 `* f3 X& F) l$ [( ?/ |
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
    5 {  i% O1 q  f, C: r+ J7 o
  21.             if (!Request.Browser.Cookies); ^* c5 v- {+ a* Q' `
  22.             {1 }3 P9 l3 r7 j6 ?/ b0 h7 ~6 m! K6 f
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    3 W7 O* Q! M! m
  24.                 return;
    , n0 A( f- j* I+ ]
  25.             }
    ) t: a% k; j% x# [5 i0 _
  26.             Response.Cookies.Add(cm_id);# M* ^/ |% B- B4 O" q9 k5 }
  27.         }" C7 c  n! N( C: Y4 t4 ?
  28.         if (Request.QueryString["pr_id"] != null)
    ) V7 c+ m1 q8 g8 e1 ^
  29.         {1 d, l! s+ B; o* o9 I  |/ n9 n' `
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    " Z3 z/ P2 _* A( o8 X, G
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    / V* |+ O" O. t# K6 _# v9 J
  32.             if (!Request.Browser.Cookies)& o, \5 }4 V/ @, R
  33.             {
    ( o/ |2 c2 e6 U8 i* J' P$ N+ G( H& ]
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");4 f+ c# b- U3 g5 \- R+ q
  35.                 return;+ }+ d( d2 L: R* ^8 q
  36.             }
    8 w* k0 U$ J1 R- r  F6 i
  37.             Response.Cookies.Add(pr_id);
    4 R5 T/ t- P( A% M" c7 n$ h
  38.         }
    # |* ~& J. g4 p! \' v
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
    8 ~6 F: l1 Y8 ]7 M4 J
  2.         string ex_id = "-1";
    ' }/ O8 ~3 X, ^4 ^( I
  3.         string cm_id = "-1";
    + J8 K1 B" H6 T, I
  4.         string pr_id = "-1";
    9 u/ V# P) D' w$ P+ X
  5.         if (Request.Cookies["ex_id"] != null)
    , u9 k+ c/ l. ^+ K
  6.         {1 B8 y: ?5 g$ j3 B
  7.             ex_id = Request.Cookies["ex_id"].Value;2 k9 u0 U0 t' e2 B& @9 l4 F# F6 T; |
  8.         }- V* r$ ~) r, ~$ q+ v$ v
  9.         if (Request.Cookies["cm_id"] != null)9 K0 N& Y/ N7 {4 y( \# A) ]
  10.         {
    7 M. S* R- p- {: h
  11.             cm_id = Request.Cookies["cm_id"].Value;3 k0 {' l) w) ~) ]' d/ C
  12.         }0 r' z  r0 x. k% {; Y
  13.         if (Request.Cookies["pr_id"] != null)
    6 Q& i) y4 ~' M4 m
  14.         {
    / ?& ^0 @7 @: S6 n5 z
  15.             pr_id = Request.Cookies["pr_id"].Value;
    1 @) U0 V) T# a' X8 ]( h* f0 b
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。- i+ b# r( }6 d
  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*/        
    ) i1 c4 L  c6 f% V! @5 e, s
  2.         this.LoadQueryString();& I1 p$ R& L' f1 l& S
  3.         this.LoadUserCookie();6 z! p7 [* a  t; l  J8 [
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变4 d. r1 |2 p/ W2 u8 L% d- l% l
  5.         {
    : k: e) k' I1 A: g8 I' m  h1 T/ M6 W
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    9 J- P7 `) j* F6 a. i( R3 B3 u
  7.             {
    - k7 q) @8 G) M' ~5 b( Y
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);5 s+ b- s" @8 I7 e- Z2 j
  9.                 JavaScript.Alert(errMsg);6 H- X  N2 _; w. T6 y6 z
  10.                 this.LoadQueryString();
    ! a& t9 q3 ~& R  m
  11.             }" I. J! Y+ |; O) ~  n- O' G; E
  12.         }
复制代码
错误提示,并且能正常重定向页面
& j# w6 {9 L3 h4 z: `1 u! O' R# v  H

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-21 08:13 , Processed in 6.067971 second(s), 8 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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