晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑 . a! c3 B% u2 j

0 F: g  R/ v0 R( M% I具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx9 Q( V+ O1 A! {' @: Q$ [
添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来8 A1 L0 ^% G+ j2 R7 r
7 @6 \, t0 [+ F' I$ u+ v5 `  [$ Z
方法是正确的,而且比较好
* {. q3 O+ ?% o6 ]4 Z  h只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。6 n5 Z) `- W/ a* s# v; |
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()
    $ H# m* C0 O( H& B. F
  2.     {
    5 u5 v9 s9 D8 p. {  S, q* r) \
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,2 y1 j8 {- T7 `# T) Z9 ?
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来6 S/ H8 J3 o5 z3 N
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/- \; i: B( ~) o7 x
  6.         if (Request.QueryString["ex_id"] != null)
    / G$ C. N& J/ n( }( |
  7.         {
    $ v& K8 {" i2 p, h3 U
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);8 L2 S9 C% |. {
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    9 A3 |. D1 n; z8 H
  10.             if (!Request.Browser.Cookies)2 w! {% e4 R- C. T# O7 q$ Z8 r
  11.             {, }6 n! w! I" e+ z
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");  n0 X; E5 Q. z7 r$ V( U. Y
  13.                 return;/ ~9 r1 C% e+ c- d% A
  14.             }
    % M8 C8 {5 C- b
  15.             Response.Cookies.Add(ex_id);0 [# m  `+ v' r, Z0 a; s$ g& d
  16.         }- t; a$ L5 ?4 r$ O3 J/ W( j
  17.         if (Request.QueryString["cm_id"] != null)" x2 k9 @% t/ D/ m: k
  18.         {
    2 {$ W  e+ B/ v( I- I
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
      z) e# T$ \# p- ~6 B0 b* \1 a( _
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());* @- f$ T* x: G" b
  21.             if (!Request.Browser.Cookies)! N" u& S6 w" g4 D1 v4 p$ T
  22.             {. ?: j7 o3 x7 K: g  @
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    $ x5 c) G% ?  }2 K
  24.                 return;. Q# V; Y* [0 d: \  L4 E
  25.             }
    ' u$ l% m/ D# d& U8 ]7 l. B' e
  26.             Response.Cookies.Add(cm_id);
    ; K, k5 q) q1 r( ?* s% V3 U5 l
  27.         }
    9 E# Y$ Z; G. ~  _
  28.         if (Request.QueryString["pr_id"] != null)
    0 y, [( u( V8 v
  29.         {# I4 D6 C+ I* s% c3 Z* A/ x8 [
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    . }) j& Y0 X( X
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());1 P! k# m$ V  f2 x; L" V) m! I
  32.             if (!Request.Browser.Cookies)
    ' N9 g3 K) Y/ V; p) N' X
  33.             {5 e1 E' G; B; V1 ]
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");( R) k" [) {" @
  35.                 return;
    ( k8 {( @* l/ d& _" m  ~; g
  36.             }
    4 Z& B$ ^- c7 n, t- C& X3 N
  37.             Response.Cookies.Add(pr_id);7 D. h$ R; f' t/ g8 h" M
  38.         }1 k' }4 U8 \& N# K% p" E
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的9 B7 Q3 K) S( ]- \' Q$ k
  2.         string ex_id = "-1";  @9 w$ F2 o$ I
  3.         string cm_id = "-1";- y/ ~( k2 R: v4 j2 d
  4.         string pr_id = "-1";2 s- i9 Q. g; D; ?
  5.         if (Request.Cookies["ex_id"] != null)& b! z9 R5 }. \; \- w
  6.         {; ]; B, r! b- k% M) M2 K
  7.             ex_id = Request.Cookies["ex_id"].Value;
      T$ p% a  M) n/ E4 y5 H: [
  8.         }
    . }$ a1 z$ D$ [( g
  9.         if (Request.Cookies["cm_id"] != null); r( s: a: b, F# K
  10.         {
    0 v( P% h2 `4 E# m7 t
  11.             cm_id = Request.Cookies["cm_id"].Value;" X/ x! Z! K( z: Y& F
  12.         }
    4 ?% @, m. E6 h
  13.         if (Request.Cookies["pr_id"] != null)
    + X4 h+ Q3 h' x  M( K0 D; {; k1 S0 p
  14.         {
    7 {* S  m0 N% A2 |  c/ H1 a3 `  d
  15.             pr_id = Request.Cookies["pr_id"].Value;
    - `) ]6 V  \+ U- G: ~
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。" I7 m5 j. ^( g8 Y$ h" e. v
  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*/        
    % G! O7 m. b( k# Z
  2.         this.LoadQueryString();
    2 e7 |: w5 x6 I; v
  3.         this.LoadUserCookie();
    ! S) x- g& o1 N
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变# Q, i2 v( z& g7 I7 S/ n& U
  5.         {6 j( ?, g- @; D& I4 K, R% h& K
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    & m; H/ ]; _# y) o, V
  7.             {: _0 _0 a/ \6 R2 \2 a! ]
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    & x0 |" v, T. h6 y8 T4 k( w: O
  9.                 JavaScript.Alert(errMsg);
    9 Y5 b7 {9 W( m6 k" p$ F
  10.                 this.LoadQueryString();
    1 G9 j2 R: n4 g' N
  11.             }/ S. [* K4 G& y6 A
  12.         }
复制代码
错误提示,并且能正常重定向页面* f) Z: t- v  `* V5 X, ]8 g

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-17 17:43 , Processed in 6.064686 second(s), 9 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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