晨鸟科技
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
[打印本页]
作者:
Star
时间:
2010-12-16 18:44
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑
1 @. {# E2 y7 F, K- d- m# j" n
, _* ?/ m, w) ?9 @; a/ }
具体办法是参照的这里:
http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
( Q" ^: I0 M, |" A
添加了Application_BeginRequest函数,还记得
<%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
+ b, S8 X% G- _1 T
+ A* M: y \2 m- _; r- S I4 `
方法是正确的,而且比较好
# Z* Q3 P3 R1 Y* [+ o+ \" u
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
0 r1 M$ o* c1 k7 W$ U
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
public virtual void LoadQueryString()
; A9 G- R1 W- K& Y) w5 j. v' m
{
3 b: m3 V' @, }5 P
/*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
0 u6 G8 q4 x# e! D
所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
- N4 U' ~5 |. m4 C+ r2 s' p
否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
6 |$ p5 \% [7 ?% v
if (Request.QueryString["ex_id"] != null)
9 B* Y6 t$ Q+ D7 n
{
) ]+ ~+ z7 s( v; t' ?; g4 o J
int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
A3 Q G% d: O; J( S2 Z
HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
' `, y& T2 V' L; b$ d Y
if (!Request.Browser.Cookies)
4 i+ j; T( U! X% `* S, _
{
' b+ q/ l( y' r, c( a
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
# }5 G7 ^- b+ C5 r- J
return;
% y* e9 I. x4 n5 \. n% r
}
9 G) W. l; P# u3 A4 N) k) O. l
Response.Cookies.Add(ex_id);
% G6 C% }. t e( s
}
! X, u) v( M' n+ T+ O# [
if (Request.QueryString["cm_id"] != null)
, n3 `% f! F' K) a' T( h
{
, |8 \5 S6 a. k5 @
int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
. u+ {: V% D) g
HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
% k% O( \" O: A" Z; O7 Y4 {
if (!Request.Browser.Cookies)
% |/ E# Z y) c @: k
{
! @9 G& s, q \) u) |' }
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
4 k- \" u# G# ]* A) e' G
return;
* i& i/ ^: I; Z: q* v! w) K
}
9 X; ?$ K, f9 s! ]
Response.Cookies.Add(cm_id);
h/ D3 L8 O, F( T0 W/ T9 S
}
4 _8 V7 ^# x' R+ D, J1 N! Q
if (Request.QueryString["pr_id"] != null)
* M3 ]# ]% ?' i
{
5 l8 V( N) U' Z9 k5 t) z( c
int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
0 ^6 z/ k% H ]- ^/ w3 g
HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
1 ]0 F8 X4 F' S t
if (!Request.Browser.Cookies)
. t' k' J5 A, o- ]
{
/ p$ c4 |: n, a( R
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
- A+ j! `. @6 m
return;
* x* n8 N' |: h( W, s9 _
}
7 w" r# E+ b3 W+ K& m# i6 r$ i
Response.Cookies.Add(pr_id);
8 j* a6 f- ?( q, v1 |9 F
}
- h5 D) O( a% f6 b' i: f v
}
复制代码
再在asax页面读取Cookie信息;
//读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
% ]0 t i+ E# k8 C
string ex_id = "-1";
7 w' P# [- d1 H; v5 w
string cm_id = "-1";
! Y" f0 d$ ?5 \ \8 |: t
string pr_id = "-1";
% `5 [! F4 C/ D; a6 _1 k: ?$ v
if (Request.Cookies["ex_id"] != null)
% z6 p9 B$ @! e% W
{
- U8 A2 o* t1 q( |
ex_id = Request.Cookies["ex_id"].Value;
! T6 r0 [ A' l( ^0 z+ p
}
0 o7 o/ C+ v. ?. \4 G
if (Request.Cookies["cm_id"] != null)
8 l9 K% ^$ r8 |* m
{
4 A8 I1 k) Z% `5 g1 Y% f! `; m
cm_id = Request.Cookies["cm_id"].Value;
3 X6 y% t' h/ i* ^8 x0 M
}
$ S! M1 e! ~/ ]% F; `/ h5 Y" p
if (Request.Cookies["pr_id"] != null)
# N1 F( x( h' n. m( }2 v
{
( e$ J" w! B" Z. U D
pr_id = Request.Cookies["pr_id"].Value;
; S( x: v0 w. x' I; R0 s
}
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
//请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
4 a& ^8 p! T- f/ g; f1 K2 E
context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码
还有一点需要注意的就是:
/*注意顺序以及IsPostBack*/
( u$ x* w- m2 y' j8 g0 u, u6 `
this.LoadQueryString();
! w6 v1 q& q5 X# u c2 B/ z& K
this.LoadUserCookie();
6 [, b; s+ P. M8 G' @& r+ | n! u
if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
# w, U! G: T! [5 Y1 l* p. o6 U, u3 v
{
5 \* f6 M) d- \ O* l/ Y, _/ e
if (!String.IsNullOrEmpty(Request.QueryString["error"]))
8 d$ m5 m+ X" T" l/ @, t
{
. z1 S, q7 B8 g
string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
, \ f/ s3 r- \* D
JavaScript.Alert(errMsg);
4 @9 o7 n* b# U |2 f
this.LoadQueryString();
t7 [4 D% L- a
}
0 R0 X- Y0 S; }2 c: E% Y! Z3 o, ^
}
复制代码
错误提示,并且能正常重定向页面
2 D& G+ |" t# L, Z
[attach]322[/attach]
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2