晨鸟科技

标题: 【体验式实践系统】上传文件大小限制、捕获大小限制异常 [打印本页]

作者: Star    时间: 2010-12-16 18:44
标题: 【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑
, f4 L+ ]- U* i$ X
* B# n& t% U( E) o, B具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx0 C% n. e' @; j1 [; [7 j/ @$ o9 `
添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来5 _* X/ L( v% W: X
0 ~( j9 F& o$ c/ ^1 L( o0 F
方法是正确的,而且比较好, p/ V& ^/ t) d+ ?, c
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。' E# H: `4 n/ W1 s. I
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()/ D; e" }, x$ u* U9 B* r) i0 {
  2.     {) \8 o2 b/ ]; u4 T6 [: D9 m5 p6 K
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
    2 {) }! x" o2 h: v6 Q' q2 N
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
    $ P, f  r& G4 V  }, L' [/ o& G
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
    5 c: h0 m; G5 s( l
  6.         if (Request.QueryString["ex_id"] != null)
    0 f6 W6 O/ d- Q
  7.         {
    ' s; ]8 B4 {9 b3 G
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
    9 ~; ?5 k5 H9 n7 ?9 W4 K% t
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());( W4 F' \/ {  C! @' R2 `  m
  10.             if (!Request.Browser.Cookies)
    9 a$ L" q$ x; s8 n& W# v% F
  11.             {
    & V0 T$ t0 L& ~1 Q. ?5 L* \# M9 p+ |0 |
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    3 t4 d( H" O2 ], a8 E  W0 g
  13.                 return;
    . U+ D9 m* l& k: |- X" ^7 V1 M
  14.             }; s/ ]9 r" t7 w
  15.             Response.Cookies.Add(ex_id);5 x) Y; ^( e9 K7 t3 P% f
  16.         }, n. e# {1 z# y# ]8 f+ e
  17.         if (Request.QueryString["cm_id"] != null)
    2 G5 P, [9 }4 z& G) d+ J3 W: \
  18.         {( z2 [3 x9 C; O1 y  M
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);1 k& \3 M8 L4 Q3 ^# M' F" R
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
    5 ^1 E) ]- Q9 F# q! x1 ~
  21.             if (!Request.Browser.Cookies)
    5 ^8 R! A8 q; Q8 A0 M9 w" [" {
  22.             {8 h# w) f# M) x0 \8 L
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    $ D" S+ n  O) l2 f0 ^
  24.                 return;
    2 {( r, s- {/ }5 e% l
  25.             }4 s# s' s/ R. ?* V
  26.             Response.Cookies.Add(cm_id);/ \4 T; B2 F9 W* k9 L3 H1 X/ y
  27.         }
    $ q1 A/ m- W) o7 _
  28.         if (Request.QueryString["pr_id"] != null)
    - i, b. `# C8 R3 n& [- L
  29.         {0 o& ]! U" I" C+ M0 M) b
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);1 D; i3 y8 ^. f1 M  W
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
    ) b$ B: l0 k$ _5 I
  32.             if (!Request.Browser.Cookies)0 m/ C/ u/ ?# H1 a3 j
  33.             {) k" {* y8 z0 [3 w) q# a1 P
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    & r. C! d$ G8 S2 K5 e
  35.                 return;
    5 _& p  K7 l/ E# w4 [3 z* ^. Z$ g
  36.             }
    : Y8 S9 g  W9 z' n
  37.             Response.Cookies.Add(pr_id);
    1 L: W# ?3 f$ L) w
  38.         }
    & j) y4 Q: Z8 B# U
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的9 c9 G" q/ v+ G) z" A( |
  2.         string ex_id = "-1";
    7 `% ]6 x2 j, _" S7 l) N
  3.         string cm_id = "-1";& d6 ?* J/ }' S+ o$ A! H2 L
  4.         string pr_id = "-1";: ]; w% e0 g7 {( w1 H- n
  5.         if (Request.Cookies["ex_id"] != null)  \; |  L8 ~0 L* }
  6.         {0 x0 j' b4 Y$ q. w
  7.             ex_id = Request.Cookies["ex_id"].Value;
    - V6 B* R1 g% l$ f- g
  8.         }8 H" n. U0 Z' R' d' n
  9.         if (Request.Cookies["cm_id"] != null)
    * b: q; Y/ w; O6 h5 l( l
  10.         {7 n0 {( }. P5 I/ v; Z
  11.             cm_id = Request.Cookies["cm_id"].Value;# S4 W' D3 _. ~7 q" F
  12.         }
    7 w/ E/ @! z9 U* Q1 S
  13.         if (Request.Cookies["pr_id"] != null)
    8 `) ^. z4 p4 Y
  14.         {
    : }) `5 i  r* P/ F1 C) W
  15.             pr_id = Request.Cookies["pr_id"].Value;
    5 X9 C' }; `; |0 J
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。& h1 a7 y0 ]! Y% u2 j  E3 s4 d9 y3 R/ ^
  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+ Z' l
  2.         this.LoadQueryString();
    ; M' [8 @+ Q2 a' [, v5 W7 o
  3.         this.LoadUserCookie();1 ?/ `3 Z* x8 E" r- b, r6 T
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    4 \5 j- I& T4 M3 C' P% }, ^
  5.         {
    5 o6 ~7 r% B4 f, ~
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    1 v: M$ x" b+ \& r" i
  7.             {
    1 h  H! u! W, A' \3 x8 Q5 q
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);; Z7 `0 I8 z: A
  9.                 JavaScript.Alert(errMsg);$ ^5 c' V1 ?" N6 v0 V) R
  10.                 this.LoadQueryString();! X6 T" g# c6 ]/ R# C
  11.             }4 l7 Y% A( a: Q* a
  12.         }
复制代码
错误提示,并且能正常重定向页面3 n4 x$ Y; N8 \, e
[attach]322[/attach]




欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/) Powered by Discuz! X3.2