晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑 * [/ @2 ^2 W8 A- _( Y
* L7 o. ]2 @" r$ H: |
具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
4 N$ L9 _- w+ k/ X9 O! V添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来* u2 l" j2 _- R4 B5 u, ]6 ]0 Q, ^

+ i( ~# d, b2 b" a3 T  k方法是正确的,而且比较好7 L+ G* l; `9 C3 n# C# [% H
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
9 z  ?+ w  P+ J( {于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()% z5 b/ V+ y/ D9 `* E# N
  2.     {
    + n, O, w4 p/ ?9 n- Y
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,; [/ G/ U' [1 L6 j6 k7 v9 r
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
      S' k0 z6 Z) U6 J% v, p! e
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/+ s/ z1 u, T, F, |+ }5 s
  6.         if (Request.QueryString["ex_id"] != null)
    2 g  v; ]6 w6 f
  7.         {
    . W  f( N+ A& P( D
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);. F4 Q. B6 w; d; P8 \
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());  ~$ F7 k' F3 J- @1 Q6 [0 P
  10.             if (!Request.Browser.Cookies)
    8 W8 ?9 o3 x) K. Q- B
  11.             {2 Q" {; o& U5 O& G1 Z
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");& t# J- y- v: h7 K. G7 E
  13.                 return;& ~4 \  u+ |, m( z6 r6 d
  14.             }' t1 b. w' j5 }. R" C! g. v
  15.             Response.Cookies.Add(ex_id);. M# X6 i$ Z3 C& d$ f- L& b  G
  16.         }* L; A2 N3 G! v0 I* W' H
  17.         if (Request.QueryString["cm_id"] != null)5 n5 L" x( G/ L! \& P: C0 h
  18.         {
    5 }$ G- v. S  `* s, m6 Y! {
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);5 d7 W2 d: a" c- e
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());0 C6 m. b5 E% C- \8 A2 c
  21.             if (!Request.Browser.Cookies)
    9 |6 I' W) g' r& k' N1 x; d
  22.             {
    . i" R  c7 h& G& {" f# R- U2 {
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    & J% ^* C4 w( e* s6 R$ J: S
  24.                 return;
    ) X$ R+ i! j8 k1 t! ?+ e
  25.             }
    # _- D" r( M8 ]" u; h6 R' L3 R' {
  26.             Response.Cookies.Add(cm_id);. U" t6 e7 j: A; b
  27.         }
    3 e0 B( [0 Z8 F' A" Y
  28.         if (Request.QueryString["pr_id"] != null)
    - i  j* x2 i/ |" N9 u. @9 ]
  29.         {
    5 r7 ?' M7 x; H2 m# M7 L5 a% n
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    $ n- Y& [+ ^% @6 m
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());: @* V8 A) w/ q7 ?) M; \8 c: K
  32.             if (!Request.Browser.Cookies)
    % q' I8 I* W6 b% \8 P- b
  33.             {( N& t( B7 J6 ^$ @( B1 a  G  M+ ^
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");' d" l4 O  G9 \0 l- b4 \
  35.                 return;8 s6 r* D5 `+ I: b9 o7 g
  36.             }8 I" C8 i4 ~' j* f
  37.             Response.Cookies.Add(pr_id);$ P: F) d1 G; y
  38.         }
    ( s' `- ?7 @) o& y7 i/ F0 D: n
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的+ `# ~5 E/ }9 ?5 u; ~, F
  2.         string ex_id = "-1";
    0 M, U) M% J0 ~. q, W: d, b+ I
  3.         string cm_id = "-1";
    : Z  T" H/ L" K3 g7 ~. D; M
  4.         string pr_id = "-1";$ C& B: l9 ~! V0 Z! h- R
  5.         if (Request.Cookies["ex_id"] != null)
    / W8 N6 e* ?1 s0 U9 d2 d' Y
  6.         {, O: g* J( g3 t3 E$ @/ e
  7.             ex_id = Request.Cookies["ex_id"].Value;
    # [1 q* X- I3 Y0 c# A
  8.         }
    % P- [; Z$ \8 Y, G. Y
  9.         if (Request.Cookies["cm_id"] != null)
    6 P1 c" K  A' ?5 R
  10.         {
    ( f7 @7 ^6 f) U( i6 g# \
  11.             cm_id = Request.Cookies["cm_id"].Value;+ `3 b! J, N  t4 Q, L9 }
  12.         }3 Z3 H0 I% S/ D! P+ h
  13.         if (Request.Cookies["pr_id"] != null)
    - y# e4 s' _4 T/ h4 y
  14.         {; W5 ?1 @) g1 @/ N! q
  15.             pr_id = Request.Cookies["pr_id"].Value;
    ) k; l( Z8 P" h/ [( ^" ]* _/ R
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。) h4 i: ^; y! ~* e
  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*/        
    ! ]5 [8 g5 I2 {6 W8 y1 _) I4 g5 j
  2.         this.LoadQueryString();
      m5 K3 ^# E/ N$ {( [6 \5 X5 x
  3.         this.LoadUserCookie();
    ' N" V/ {- ~8 K% d) b4 X" B. }
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    4 w& h; f$ ~4 O. j+ k0 k
  5.         {& T9 ^6 w, E1 C# C& p9 {5 X5 u
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    $ S) s7 t' U8 q
  7.             {& g6 q# \! Y5 Z6 ?. n, |2 `- H
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    , s  e3 t$ b& G0 j- F% M. ^# ^
  9.                 JavaScript.Alert(errMsg);) R/ `3 ^; t6 k5 `6 b0 e
  10.                 this.LoadQueryString();
    9 L3 {6 C3 t8 {* J
  11.             }. `. P* B+ G$ Q4 [
  12.         }
复制代码
错误提示,并且能正常重定向页面
6 }% G2 N7 A( A' R6 S; J% ~( F

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-10-30 07:48 , Processed in 6.072499 second(s), 8 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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