晨鸟科技
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
[打印本页]
作者:
Star
时间:
2010-12-16 18:44
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑
$ k0 D3 Z: j" y( I! o) I3 b. [
4 |6 l/ j8 [0 y# E/ @8 d
具体办法是参照的这里:
http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
; ^" [4 o5 q* ~8 [2 V ^ D
添加了Application_BeginRequest函数,还记得
<%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
# _; {0 o8 u" k/ p) _ z
1 g1 ~1 F) M& s) p' c
方法是正确的,而且比较好
" A2 q, P0 G, ~
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
2 J, |+ l8 ?1 l W$ g S
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
public virtual void LoadQueryString()
3 t* E! ] z- W2 C! j
{
! W6 m$ ^! ^0 O1 T! ~- D
/*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
: b1 A9 u8 R3 y7 L4 G
所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
# f- D, t3 |3 T7 Y
否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
5 C/ _& G+ k) e1 z) s
if (Request.QueryString["ex_id"] != null)
+ |* p; ?9 H1 d$ ]6 z
{
" W* U. S7 N9 h( I
int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
6 V9 m; c( j3 E; p2 F$ {8 n2 q
HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
' s6 N2 R$ n8 I2 B' x
if (!Request.Browser.Cookies)
3 b- N" k: W4 e$ {- G4 e; l2 |; ^
{
" g, q6 R& m6 ~7 v
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
$ B' z% ^. e4 J, Y- ]( M3 i
return;
: }9 d0 B' c9 y5 ] F
}
) c- P. J" m a
Response.Cookies.Add(ex_id);
8 k+ c; H. g9 j+ J2 ?
}
& @' @! n% b) d) @! C" ?8 z1 ~* Q- [5 T p
if (Request.QueryString["cm_id"] != null)
: `/ A2 H( j- ~3 I
{
6 q9 N9 [3 e% @, Q! _
int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
6 H) U* I8 p' j) O7 G9 M: a7 k8 q
HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
" c6 ~1 J5 U; h0 q: G
if (!Request.Browser.Cookies)
" O0 r# F4 r! C& F% [" F2 V( b1 V" E
{
+ r/ x! C( e3 M9 W1 {" H7 ?
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
0 `1 _: h% j1 W% \0 X
return;
: h$ d6 d; `$ B+ v( [0 U
}
5 j# ?, A# Z* {; K; z9 |% U% E
Response.Cookies.Add(cm_id);
& P ~5 |' m' h4 C# [' A. P0 m
}
! U: x) O$ W; Z$ Y. Q) }3 o- P4 }
if (Request.QueryString["pr_id"] != null)
; u- W& p" ?9 l( M
{
* {9 [2 e3 g, ` {- c
int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
) Y5 Y( m" e4 g" }1 v
HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
5 T! `( @$ Y9 O
if (!Request.Browser.Cookies)
6 j! }' _; L8 I" q2 P# _% u! L* t
{
, b X& D& Y- e( M7 z0 `
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
+ |% [2 n2 s) y5 V% b3 m
return;
% Z! n, g# o, q" D
}
# O) c! A5 j% i! v6 Q7 E0 F% a! r
Response.Cookies.Add(pr_id);
8 ~% t, `2 b5 u/ c! x3 `4 O
}
. q0 O W+ F; S1 S0 H+ f5 n
}
复制代码
再在asax页面读取Cookie信息;
//读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
& c' L2 Q6 o& w3 ~0 B) r, j- ?
string ex_id = "-1";
& a4 }! H+ x/ A' s/ ^
string cm_id = "-1";
/ N) d6 S2 r7 R$ T" {! J$ c9 f
string pr_id = "-1";
! A$ B0 }$ L. c k( B$ ^+ m% M: f
if (Request.Cookies["ex_id"] != null)
K% g5 b# z2 x: w! u/ Y! p
{
! t, Y! g0 |3 X4 R+ E
ex_id = Request.Cookies["ex_id"].Value;
$ m0 p2 X9 i# c5 Q/ j1 A
}
$ R' t1 O. m, F/ g$ q
if (Request.Cookies["cm_id"] != null)
+ S( X d' U$ h
{
0 D2 s# ^& x0 B/ b7 `& J8 C% o
cm_id = Request.Cookies["cm_id"].Value;
) c; @+ @, z' U4 z/ N+ v
}
: U7 x9 J- x& z3 y
if (Request.Cookies["pr_id"] != null)
! B7 ]7 _0 T2 C! |) b, J0 a
{
3 R: u) k( Z ]+ |
pr_id = Request.Cookies["pr_id"].Value;
( u' f) J$ E8 W+ W) h) e% h
}
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
//请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
4 [; p: r, m j, p( y+ j2 A
context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码
还有一点需要注意的就是:
/*注意顺序以及IsPostBack*/
4 @9 x. A4 T. x/ q+ q) t
this.LoadQueryString();
( k% Q$ j) J1 l! A3 H
this.LoadUserCookie();
- P" g \7 q- M
if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
6 f0 [/ @0 C; {/ p4 `( G
{
1 y/ _1 R1 Q( } _9 Y+ B
if (!String.IsNullOrEmpty(Request.QueryString["error"]))
) _4 }. F) i+ m
{
6 u/ h) B3 u6 t; N
string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
( x2 }% a& ^4 Z# {5 I G
JavaScript.Alert(errMsg);
* a) e' C+ F2 F/ A
this.LoadQueryString();
4 {% M/ D9 O) F0 d6 M- O
}
" k$ W" q; l6 P j* v! D. R
}
复制代码
错误提示,并且能正常重定向页面
, ]! ]2 X% M4 s' r7 q
[attach]322[/attach]
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2