飞翔无限fxwx.com广西经贸职业技术学院论坛
标题:
[建站技术]七招制胜ASP.NET应用程序开发
[打印本页]
作者:
月中水
时间:
2009-10-16 01:25
标题:
[建站技术]七招制胜ASP.NET应用程序开发
随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
' j# K5 `% j8 i8 j& a
求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
% a3 O& W4 D5 P' L
1. ~ 的用法
/ L- h0 M' J0 U' w, y: g
一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
7 U9 R: \( m) x; i+ ]5 d4 T V" W8 I
式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
) a; R( d3 `6 c4 b" |
同层次的两个目录的aspx文件分别引用时,问题就会出现了。
. v' w/ u G5 s( U" }: M& \
~/image/about.bmp
* m% g2 b# N( t
是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
& `% t6 g z# O1 P0 }
加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
) N0 |" p6 S/ P# }) [/ n' q* v
它。
1 t$ _5 r: c! b
2. 在刷新和提交页面后,保存你的页面滚动条的位置
1 P3 `* m5 a, q; A
经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
/ P& o7 s$ Y2 o5 r
用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
$ }7 n/ A& l/ A" R% w
组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
; F& ^' R5 E- L& ]7 D% M
也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
5 H: B8 t) h3 `
个控件又需要他选择一下?
) s }- o+ K- P
用下面的方法可以很快地确定和记住你提交前的位置。
7 C9 d) h h- o: ]
网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
& T; e3 U0 f5 r& u2 t
不过他使用了Web Behavior这意味着你需要使用一个.htc文件
3 R' X3 }4 P* o. R' p9 G
Private Sub RetainScrollPosition()
& l) b+ L$ D# |# Q: d
Dim saveScrollPosition As New StringBuilder
: I; {9 D2 I9 B$ a9 U
Dim setScrollPosition As New StringBuilder
) h2 Q1 i' s& ~$ v: u
RegisterHiddenField("__SCROLLPOS", "0")
" W2 D, `" |- F" d# f
saveScrollPosition.Append("<script language='javascript'>")
' Y% v. \; |/ m. K, w v9 I. b
saveScrollPosition.Append("function saveScrollPosition() {")
# N" z- I, _/ [" `$ @1 l
saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
0 y* Y+ _. N, I# b3 z
saveScrollPosition.Append("}")
% k" z! c+ E- B; j* j. l
saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
/ |0 G" W& \5 Q6 A
saveScrollPosition.Append("</script>")
/ y0 \2 o( }* K# _5 l0 y. x
RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
. U( M4 r9 n# B0 {/ v7 R
If (Page.IsPostBack = True) Then
2 m# V4 c& t ?
setScrollPosition.Append("<script language='javascript'>")
) N. ?+ @, q: E; t7 |
setScrollPosition.Append("function setScrollPosition() {")
# N! d; @4 ]; k* W
setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
+ l% ^ i* b9 B% v0 f5 X4 l$ c: w
setScrollPosition.Append("}")
2 P# W+ U- n6 F; V4 ]+ [( O
setScrollPosition.Append("document.body.onload=setScrollPosition;")
5 [5 n1 a' @! g6 Y$ e
setScrollPosition.Append("</script>")
1 S2 \1 X7 e& b$ C# g0 ]6 p7 y/ R
RegisterStartupScript("setScroll", setScrollPosition.ToString())
5 M" l& Z2 h8 a4 V. O
End If
; d# N* S4 ~1 l X$ J, X; B9 K
End Sub
! ~$ A- d6 c( u N
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
; A$ E2 ~# \2 o
MyBase.Load
5 K* H1 v7 E7 x7 |# A! x) _
RetainScrollPosition()
+ K. Q) {4 U9 Z% O3 |
End Sub
* w% [9 h* t% }% f; n
) {; m( f5 a5 ~1 g7 ^, x5 ~
3. DataList使用不同风格的模板
; [8 E$ R6 Y E% K, H7 h
这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
8 ]* }# q4 `( m* Z! n! f
件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
5 p$ q: Z. X4 u4 x. W
元素或是加一个促销广告图等等。
) s4 u0 h1 K3 u3 j/ n
Dim theme As String
" a# y7 t8 L5 w7 J: ~8 P; N
theme = DropDownList1.SelectedValue
- i- V, d+ }1 l0 f4 O$ x+ h
DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
" Y3 D c, f1 {. w; e. _
DataList1.DataSource = DS
, j. Z; k( z6 r% T6 ^3 w& Z
DataList1.DataBind()
% h$ c/ U; w7 K& n# }3 s
4. 设置服务器端控件的焦点
- v% |* Z; I) {9 x" s+ N
Private Sub SetFocus(ByVal controlToFocus As Control)
$ N8 s' ^& F X; L J
Dim scriptFunction As New StringBuilder
7 a* m" i8 }+ O& }
Dim scriptClientId As String
1 ]+ Q8 B6 V k- `0 \
scriptClientId = controlToFocus.ClientID
3 I' D. L2 S4 E5 [( \6 d! R4 @
scriptFunction.Append("<script language='javascript'>")
( |. @3 @+ k0 ?2 K7 C
scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
& i* Q: o" v7 G: q# M3 W
scriptFunction.Append("</script>")
$ P# X2 }+ A# \: f9 E; j/ ^
RegisterStartupScript("focus", scriptFunction.ToString())
& u6 j7 `2 s7 f8 r g7 z
End Sub
4 d' e9 i/ Q' }; j$ q
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
; X1 b" q$ T7 f1 `# I! S9 F$ ?
MyBase.Load
0 f4 Q; S4 \; V+ Q# R2 I
If (Page.IsPostBack = False) Then
- Q7 e6 ? w, j
SetFocus(TextBox1)
, A, E! Y5 @+ k% d
End If
0 ~8 a" ]) E. u3 k/ e9 G
End Sub
. o9 m9 _( Y* C! |8 ?
5. 滚动DataGrid
& ?8 S! m4 `' w( D
这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
, K! i7 l' u& D( _% L3 @6 m8 f
有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
0 b# ~, p* r8 _2 I+ k/ a: J
件放在一个DIV中将overflow属性设置成auto
. Y7 N3 j) s) s7 a6 ~
<div style=“height:400px;width:200px;overflow:auto”>
/ V: m6 A {8 k/ _1 G- v+ r
<asp:datagrid id=“MyGrid” runat=“server”/>
6 Q1 {* T& B$ _* `& q5 K( }- I
</div>
2 a, r4 P2 E/ J: T
6. 动态创建控件
1 z0 [6 [. r- o1 ^& i( V8 l8 j
利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
) ], ?+ W( N; y# \, U$ R) M6 y% X. d6 f7 j
Sub Page_Load()
) f, d4 @7 D& j& s1 k" c
Dim i as Integer
# [9 ]$ W" M( U5 s" F
For i=0 to 4
& n8 l3 s3 d' f: y ?3 _; y! j; n; `
Dim myUserControl as Control
" O: z2 {+ k+ z" b; r! a% Y
myUserControl = Page.LoadControl(“foo.ascx”)
8 X5 L2 x5 X& m* z0 _+ l
PlaceHolder1.Controls.Add(myUserControl)
% J% T2 [1 v# o+ v8 }5 J
PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
; ]3 [; t0 P1 B/ V# C
Next i
6 M$ y: a0 v3 F
End Sub
5 n4 ?, @: E2 E' \
7. 客户端代码的使用
9 r% _- z3 @: D
1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
7 I+ M) H0 E# U2 J
准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
c. B: @/ P0 L- a( f }9 |
asp:ImageButton id=“foo”
# `" Q# D/ h; c3 ]8 a
ImageUrl=“start.jpg”
: j4 y( y6 P0 T7 e5 D3 w0 T- r0 r4 C
onMouseOver=“rollover(this);”
6 g; ~. l$ d5 B3 L5 u% I! }; v
onMouseOut=“rollout(this)”
. o. q# `; [' p+ ~1 C
rolloversrc=“myrollover.jpg”
{: \; T. {1 S# K( h" u
rolloutsrc=“myrollout.jpg”
: W, b e0 F6 \, y, d0 }
runat=“server”/>
1 m, |9 p! @% |5 {- D0 P
<input type=Button onClick=“return clientHandler()”
0 V# M1 ]2 d) b: g
onServerClick=“Button1_Click” … />
, ^ A/ i; ~0 n$ E! |
2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
. O' H- ]: @/ h+ K* \" W, X
有的客户端控件。
/ u% E1 r S' ~/ t% _7 L" W6 s- M
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
3 p6 R$ l+ H8 Q9 {4 C g
MyBase.Load
$ W5 T; l8 L* w) G
RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
9 b9 I* @) @3 H; m
End Sub
' }0 U. \# L( I) X }/ p
3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
欢迎光临 飞翔无限fxwx.com广西经贸职业技术学院论坛 (http://www.gxjmbbs.com/)
Powered by Discuz! X3.2