晨鸟科技
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
[打印本页]
作者:
Star
时间:
2010-12-16 18:44
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑
, f4 L+ ]- U* i$ X
* B# n& t% U( E) o, B
具体办法是参照的这里:
http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
0 C% n. e' @; j1 [; [7 j/ @$ o9 `
添加了Application_BeginRequest函数,还记得
<%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
5 _* X/ L( v% W: X
0 ~( j9 F& o$ c/ ^1 L( o0 F
方法是正确的,而且比较好
, p/ V& ^/ t) d+ ?, c
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
' E# H: `4 n/ W1 s. I
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
public virtual void LoadQueryString()
/ D; e" }, x$ u* U9 B* r) i0 {
{
) \8 o2 b/ ]; u4 T6 [: D9 m5 p6 K
/*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
2 {) }! x" o2 h: v6 Q' q2 N
所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
$ P, f r& G4 V }, L' [/ o& G
否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
5 c: h0 m; G5 s( l
if (Request.QueryString["ex_id"] != null)
0 f6 W6 O/ d- Q
{
' s; ]8 B4 {9 b3 G
int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
9 ~; ?5 k5 H9 n7 ?9 W4 K% t
HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
( W4 F' \/ { C! @' R2 ` m
if (!Request.Browser.Cookies)
9 a$ L" q$ x; s8 n& W# v% F
{
& V0 T$ t0 L& ~1 Q. ?5 L* \# M9 p+ |0 |
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
3 t4 d( H" O2 ], a8 E W0 g
return;
. U+ D9 m* l& k: |- X" ^7 V1 M
}
; s/ ]9 r" t7 w
Response.Cookies.Add(ex_id);
5 x) Y; ^( e9 K7 t3 P% f
}
, n. e# {1 z# y# ]8 f+ e
if (Request.QueryString["cm_id"] != null)
2 G5 P, [9 }4 z& G) d+ J3 W: \
{
( z2 [3 x9 C; O1 y M
int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
1 k& \3 M8 L4 Q3 ^# M' F" R
HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
5 ^1 E) ]- Q9 F# q! x1 ~
if (!Request.Browser.Cookies)
5 ^8 R! A8 q; Q8 A0 M9 w" [" {
{
8 h# w) f# M) x0 \8 L
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
$ D" S+ n O) l2 f0 ^
return;
2 {( r, s- {/ }5 e% l
}
4 s# s' s/ R. ?* V
Response.Cookies.Add(cm_id);
/ \4 T; B2 F9 W* k9 L3 H1 X/ y
}
$ q1 A/ m- W) o7 _
if (Request.QueryString["pr_id"] != null)
- i, b. `# C8 R3 n& [- L
{
0 o& ]! U" I" C+ M0 M) b
int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
1 D; i3 y8 ^. f1 M W
HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
) b$ B: l0 k$ _5 I
if (!Request.Browser.Cookies)
0 m/ C/ u/ ?# H1 a3 j
{
) k" {* y8 z0 [3 w) q# a1 P
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
& r. C! d$ G8 S2 K5 e
return;
5 _& p K7 l/ E# w4 [3 z* ^. Z$ g
}
: Y8 S9 g W9 z' n
Response.Cookies.Add(pr_id);
1 L: W# ?3 f$ L) w
}
& j) y4 Q: Z8 B# U
}
复制代码
再在asax页面读取Cookie信息;
//读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
9 c9 G" q/ v+ G) z" A( |
string ex_id = "-1";
7 `% ]6 x2 j, _" S7 l) N
string cm_id = "-1";
& d6 ?* J/ }' S+ o$ A! H2 L
string pr_id = "-1";
: ]; w% e0 g7 {( w1 H- n
if (Request.Cookies["ex_id"] != null)
\; | L8 ~0 L* }
{
0 x0 j' b4 Y$ q. w
ex_id = Request.Cookies["ex_id"].Value;
- V6 B* R1 g% l$ f- g
}
8 H" n. U0 Z' R' d' n
if (Request.Cookies["cm_id"] != null)
* b: q; Y/ w; O6 h5 l( l
{
7 n0 {( }. P5 I/ v; Z
cm_id = Request.Cookies["cm_id"].Value;
# S4 W' D3 _. ~7 q" F
}
7 w/ E/ @! z9 U* Q1 S
if (Request.Cookies["pr_id"] != null)
8 `) ^. z4 p4 Y
{
: }) `5 i r* P/ F1 C) W
pr_id = Request.Cookies["pr_id"].Value;
5 X9 C' }; `; |0 J
}
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
//请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
& h1 a7 y0 ]! Y% u2 j E3 s4 d9 y3 R/ ^
context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码
还有一点需要注意的就是:
/*注意顺序以及IsPostBack*/
* \/ ~ E+ Z' l
this.LoadQueryString();
; M' [8 @+ Q2 a' [, v5 W7 o
this.LoadUserCookie();
1 ?/ `3 Z* x8 E" r- b, r6 T
if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
4 \5 j- I& T4 M3 C' P% }, ^
{
5 o6 ~7 r% B4 f, ~
if (!String.IsNullOrEmpty(Request.QueryString["error"]))
1 v: M$ x" b+ \& r" i
{
1 h H! u! W, A' \3 x8 Q5 q
string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
; Z7 `0 I8 z: A
JavaScript.Alert(errMsg);
$ ^5 c' V1 ?" N6 v0 V) R
this.LoadQueryString();
! X6 T" g# c6 ]/ R# C
}
4 l7 Y% A( a: Q* a
}
复制代码
错误提示,并且能正常重定向页面
3 n4 x$ Y; N8 \, e
[attach]322[/attach]
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2