晨鸟科技

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2010-12-16 18:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Star 于 2010-12-16 19:53 编辑 1 u6 v3 |: U/ v0 @
* q7 ?) x, ]4 }& z
具体办法是参照的这里:http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
* J' W+ N: s; V2 v$ T7 Z9 ^添加了Application_BeginRequest函数,还记得
  1. <%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
, @) ^# Q7 V( h; a
0 ^& i+ z, e0 E方法是正确的,而且比较好
( g9 Z4 Z8 n2 V0 x! ~  w只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
. F' o% R& A1 g7 G8 D5 i! t于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
  1. public virtual void LoadQueryString()& j* N: I9 x( r
  2.     {$ P# }2 j- }# j! ?2 j
  3.         /*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
    2 H, y0 E! C$ r8 D1 F
  4.             所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来2 F1 F0 g" L9 n( \3 U( C
  5.             否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/1 S4 y0 G) v: P) L/ C, c. j8 p% D
  6.         if (Request.QueryString["ex_id"] != null)
    3 x1 j" C+ c/ U8 G0 u$ p
  7.         {* V9 H  e2 @( B+ u# l4 @
  8.             int.TryParse(Request.QueryString["ex_id"], out this.ex_id);2 {( l" H; k3 l) I. s# i/ q: m: G; e
  9.             HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
    - c/ Z" F# A) q+ ^+ L+ ^
  10.             if (!Request.Browser.Cookies)
    & o: a" {: \( N/ i7 C* K
  11.             {* q! m5 w1 a, Z) A- q$ ^
  12.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    ) D* T/ o9 V( e6 q9 q& ~
  13.                 return;
    % p. j4 `5 Z$ y  T' k4 d9 P* ?
  14.             }1 }, v. T( y$ R3 [; \, P' m- c- e
  15.             Response.Cookies.Add(ex_id);" d; X, \0 @0 @5 `1 D' k* I  j3 y# N
  16.         }( M+ a& R- T6 M
  17.         if (Request.QueryString["cm_id"] != null)7 q) B" Q0 D* g, W& l
  18.         {
    2 Z& E0 ~' x1 Q- @
  19.             int.TryParse(Request.QueryString["cm_id"], out this.cm_id);. L* E5 O, Z: F8 q
  20.             HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());) p; O9 ~4 u+ ~0 W/ |/ z" d
  21.             if (!Request.Browser.Cookies)/ L8 Z$ }2 ^( L; H. ^" N8 s
  22.             {9 k' g8 u; P/ f$ V1 O0 _
  23.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    * b; I8 c" l9 \* D; X* y
  24.                 return;( I( s; ]8 b+ a" z1 Z. Z
  25.             }
    $ x; \6 m6 f. |
  26.             Response.Cookies.Add(cm_id);7 M/ g, X* c  S4 ]! o5 r$ Z
  27.         }' I% a3 r4 K! F
  28.         if (Request.QueryString["pr_id"] != null). r" B0 O8 Z, U9 e* _6 O
  29.         {
    $ m; u* X1 _: x/ {
  30.             int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
    8 h8 A, v0 U4 e
  31.             HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());: ]! @4 u1 u4 C) j! ~; d
  32.             if (!Request.Browser.Cookies): p/ s+ C2 E6 N1 k1 c2 G
  33.             {3 y: z) V- X) S9 G
  34.                 JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
    % s3 \* m' w' N0 p5 [; r
  35.                 return;7 g6 c; d) f3 R; T4 F$ L* A5 L
  36.             }4 [7 z4 }, _" N, ]+ D: f
  37.             Response.Cookies.Add(pr_id);
    $ p: m$ y# E2 B. o$ d2 t2 d7 B9 b/ L: G
  38.         }5 n9 ]* R* S7 A# ]
  39.     }
复制代码
再在asax页面读取Cookie信息;
  1. //读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的6 h4 z# |4 A- u! _7 C% Z# P! i$ t" O  H
  2.         string ex_id = "-1";
    # |" A! {" Q6 g: O- z! s
  3.         string cm_id = "-1";8 a0 ]! b& q+ u6 {
  4.         string pr_id = "-1";1 S$ f4 }) P2 s. S8 P
  5.         if (Request.Cookies["ex_id"] != null)
    7 c- L" A+ N8 V
  6.         {2 P' V: N4 h5 {4 {
  7.             ex_id = Request.Cookies["ex_id"].Value;# ^. T7 C5 I6 R5 _7 H' r( ]
  8.         }1 Y+ }& x- ^( f7 a
  9.         if (Request.Cookies["cm_id"] != null)" b1 {/ A/ J- e# ~; k# }& f# t2 g
  10.         {
    0 Z6 N: Q* O$ e6 S' y
  11.             cm_id = Request.Cookies["cm_id"].Value;
    * R5 k# J) Q' c
  12.         }1 ~( H; D/ ^2 t7 n8 P  D
  13.         if (Request.Cookies["pr_id"] != null)7 K' y5 ?, n9 H, e! }6 p; k
  14.         {
    * R1 M  j. W* Z- y0 B6 I
  15.             pr_id = Request.Cookies["pr_id"].Value;. c# e( S0 n/ P- N# F- ~
  16.         }
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
  1. //请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
    9 g* @2 c/ p! w# x0 ]
  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*/        . G6 e8 [4 i6 b9 c3 d+ Q! P5 P% I
  2.         this.LoadQueryString();( `- Q: h$ m+ `
  3.         this.LoadUserCookie();8 l  N- N" O* m3 p6 F
  4.         if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
    1 b2 U! M$ m( v7 X5 N3 r+ B# y$ ]3 g; x
  5.         {
    # |9 @. W3 u  @* b' q- c1 ~5 w
  6.             if (!String.IsNullOrEmpty(Request.QueryString["error"]))
    : |9 {* ^4 \6 k8 p7 Y6 t3 ^
  7.             {
    # d( o( [- l% T' J' W
  8.                 string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
    " e) P* {- w" K5 w- [, L
  9.                 JavaScript.Alert(errMsg);
    $ C" l- n  }$ G& y  V  [( G* h. i
  10.                 this.LoadQueryString();
    0 L2 J" g+ S. k6 r) J- g
  11.             }
    5 s- R3 }- T9 _0 g
  12.         }
复制代码
错误提示,并且能正常重定向页面- B2 ]* C& J: {- q3 y

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-6-15 01:11 , Processed in 6.069117 second(s), 8 queries , Wincache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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