晨鸟科技
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
[打印本页]
作者:
Star
时间:
2010-12-16 18:44
标题:
【体验式实践系统】上传文件大小限制、捕获大小限制异常
本帖最后由 Star 于 2010-12-16 19:53 编辑
$ g" C1 e! r9 ^0 v) [
: Y! `9 N. `4 P$ @* ?$ k+ c. U
具体办法是参照的这里:
http://dotnet.aspx.cc/article/d8 ... 7027662e/print.aspx
8 C Y) ~; V: q, D
添加了Application_BeginRequest函数,还记得
<%@ Import Namespace="System.Web.Configuration" %>
复制代码
,把web.config的内容Import 过来
. C" g2 W$ q0 t2 Z+ ^' t
* j2 e" j/ v. @" x+ w& B" f0 \
方法是正确的,而且比较好
* I, K- {6 f; Y/ J: f6 U; y
只是EB_EXP有个问题就是在进入实践页面的时候,pr_id,ex_id,com_id都是从left树里面传递过去的,使用上面的将诶办法,当出现异常的时候会需要从asax重定向到出现异常的页面,如果不加处理就直接定向到异常页面,在页面加载的时候会重新绑定数据,这是需要重新将pr_id,ex_id,com_id这些参数传递过去,asax页面是读不到Querystring,应该是Request的内容已经修改了,之前的地址参数已经没有了。
( E* ~* V7 ?/ {( {& Q6 Y! G9 R- t/ x
于是在PracticePageBase页面在读LoadQuerystring函数中,在读地址参数的同时将其保存到Cookie中,Cookie信息是可以在有效时间内保存的;
public virtual void LoadQueryString()
9 f9 q$ J/ {) k7 r
{
# J: \8 C% b- x# a/ W
/*如果上传的文件超过web.config中限定的最大值,使用asax来进行异常捕获时,会需要重定向请求url,
3 l" E& R) s0 ^ E+ m$ s
所以需要将ex_id、cm_id、pr_id信息放到cookie中进行保存,在asax进行页面重定向的时候再将这些值作为地址参数传递过来
: O$ ^2 Y* p( f. C
否则页面重定向没有再传入实践ID等参数,页面会加载不了数据*/
0 q `% ~: N# ?$ j$ i% e+ v. E
if (Request.QueryString["ex_id"] != null)
& f1 w: B0 N8 z, \
{
4 s' B2 @! u0 [# P* P$ a$ n
int.TryParse(Request.QueryString["ex_id"], out this.ex_id);
& n( n: J" }( \! a
HttpCookie ex_id = new HttpCookie("ex_id", Request.QueryString["ex_id"].ToString());
) A, l5 u% u6 u: y8 I
if (!Request.Browser.Cookies)
% Q* z, U& {2 J5 c
{
" z- u B8 \' b/ q& a3 H8 y
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
& h6 p" b B" O- z; j9 X0 I* o; }
return;
# Q0 \3 o0 a7 H- @# t6 K7 o
}
( Z! m, a: _1 N8 ~# z
Response.Cookies.Add(ex_id);
b! ~; l# B; L) E- \
}
% o) P" n+ @" A) f2 I4 P' K1 K k
if (Request.QueryString["cm_id"] != null)
2 U) v+ H, ?# I, R, X
{
; S, C& t* w9 T2 ?- _) ~5 y
int.TryParse(Request.QueryString["cm_id"], out this.cm_id);
5 |# |9 }" U7 e3 T4 G a
HttpCookie cm_id = new HttpCookie("cm_id", Request.QueryString["cm_id"].ToString());
6 F1 o3 }% J* e4 F( |4 U
if (!Request.Browser.Cookies)
0 }* L& @; r3 ]4 i& k9 e
{
* [; b( _8 n' _; x
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
* [1 Z0 T7 P: q/ _
return;
4 q" |3 j8 I; j+ [% \; F$ ~
}
$ k9 N: M0 h4 V. I
Response.Cookies.Add(cm_id);
4 q) j/ |) [0 F3 V9 b$ f2 o: U
}
' u [$ N# t( P* |3 f; I+ Z
if (Request.QueryString["pr_id"] != null)
+ k3 r7 f" p" v5 g$ C8 n! _6 x
{
" w2 x( \- b( r% T- C
int.TryParse(Request.QueryString["pr_id"], out this.pr_id);
: T/ h' l9 ^8 J) i
HttpCookie pr_id = new HttpCookie("pr_id", Request.QueryString["pr_id"].ToString());
' ]/ C d, b/ p" {' s
if (!Request.Browser.Cookies)
# _$ \2 Y. }5 e+ k& p, {: Y% D
{
+ l- @9 q8 j+ R: S2 n; l U
JavaScript.Alert("UserCookie_Unable", "请打开浏览器的cookie功能以保证有足够的操作时间,谢谢!");
7 q9 o3 Z/ D/ |0 j
return;
' ~4 c4 C( M C) j; X: B/ P, u6 L
}
$ g& L/ u E1 v+ K# C3 z& F, }
Response.Cookies.Add(pr_id);
3 U+ w z# L+ P% t' _- M
}
* d5 I; _' l* b/ n B3 B0 x
}
复制代码
再在asax页面读取Cookie信息;
//读Cookie信息,初始化为"-1",因为PracticePageBase是以-1进行判断的
% W: S& J: W3 |$ @
string ex_id = "-1";
~1 m7 _$ K ^5 c! [. O7 r* ~
string cm_id = "-1";
" L7 @- i [9 |/ E! p& Z% p
string pr_id = "-1";
5 u) L, G! j* V1 h
if (Request.Cookies["ex_id"] != null)
* o3 U I) j0 K$ y+ P4 u6 u
{
6 k5 r+ H0 C$ A! g1 d4 w! k
ex_id = Request.Cookies["ex_id"].Value;
3 k" [( l, a/ o+ W5 q7 o" \6 v |8 E
}
0 a3 O+ i3 V& ` H+ f# Y( ^
if (Request.Cookies["cm_id"] != null)
& e2 w7 J1 B4 q& D" G! C
{
" N+ c6 E0 i" p) E( t
cm_id = Request.Cookies["cm_id"].Value;
- b* F6 y& w1 X
}
. n1 z. L, \, \9 L! t
if (Request.Cookies["pr_id"] != null)
9 L# F* s) U6 ~0 d1 D2 C
{
' C# y5 }* V0 }% M, T9 a$ X& W
pr_id = Request.Cookies["pr_id"].Value;
; M$ D4 z& b( f+ `. B
}
复制代码
最后在重定向的时候将pr_id,ex_id,com_id再作为地址参数传递过去,在页面加载的时候就能加载到实践数据了
//请求重定向到上载页面,并给用户提示信息,同时将实践ID等参数继续作为地址参数传递到页面上,这样页面才能够加载到实践数据。
4 `) j0 j9 Y, B
context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("请上传小于4M的文件!") + "&ex_id=" + ex_id + "&cm_id=" + cm_id + "&pr_id=" + pr_id);
复制代码
还有一点需要注意的就是:
/*注意顺序以及IsPostBack*/
3 @7 K7 @+ _! l0 F& S1 |8 P0 _
this.LoadQueryString();
6 p5 [+ H, c5 V5 M5 a$ O
this.LoadUserCookie();
% t! W' }' |1 {( Y. ~4 K
if (!this.IsPostBack)//回传的话就不执行了,以防每次刷新页面都会进行提醒,因为Request.QueryString["error"]的内容没有改变
3 @& B1 Q# N3 z# j/ z) V- A
{
; N2 Y4 U: Q; n1 O( b* G
if (!String.IsNullOrEmpty(Request.QueryString["error"]))
, v, B3 ?# {; x7 z: `; {) `
{
, P" a2 K; r G$ ?
string errMsg = Server.HtmlEncode(Request.QueryString["error"]);
$ ^1 z. z1 i# Y3 o6 U
JavaScript.Alert(errMsg);
3 B- @& x' O/ v! T" z
this.LoadQueryString();
2 j9 R6 M/ P# O1 n
}
% E* J5 \& T7 o
}
复制代码
错误提示,并且能正常重定向页面
' p( V! J- M$ r. `) e4 @
[attach]322[/attach]
欢迎光临 晨鸟科技 (http://www.chenniao.com/cprofessor/)
Powered by Discuz! X3.2