设为首页

广西经贸职业技术学院论坛

 忘记密码
 免费注册
查看: 1343|回复: 0
打印 上一主题 下一主题

[建站技术]七招制胜ASP.NET应用程序开发

[复制链接]
  • TA的每日心情

    2019-8-18 09:37
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需+ C3 l7 o9 A& D5 U1 S3 @
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。5 ]6 s8 C  q$ [0 N# Z& Y4 |( D
      1. ~ 的用法6 x$ A( B2 D, }. a
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    % C4 S  K2 ~; I式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    % @4 Q6 z0 X( L( [$ W8 }1 `; }同层次的两个目录的aspx文件分别引用时,问题就会出现了。
      s" H; K1 ?$ E( l+ u  ~/image/about.bmp
    , Y8 @$ z7 ~# C2 l是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    # i2 [7 b' a; x* g加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    ( r( J) ]- W; p, l9 M6 ]5 z它。
    0 h  |4 m5 n. o9 c3 T# ^  2. 在刷新和提交页面后,保存你的页面滚动条的位置4 @2 O1 _% |& m  c
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    8 F) a* S6 B- l- F用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    # J4 O0 B; Q. [6 g( a8 ~" m$ s1 G组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方, f' E9 T% c6 |! s5 Y( Y
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    : h: V3 G7 ?/ L$ W) {个控件又需要他选择一下? 1 C& Y( @+ f* r8 \  d+ E4 B
      用下面的方法可以很快地确定和记住你提交前的位置。4 s; s' o% s. h; p/ K! r
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,# n; s2 K4 }+ I; l
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件) B+ g. }) @! H. l2 y' u
    Private Sub RetainScrollPosition()
    4 o7 X: a- [! ?& R4 q! nDim saveScrollPosition As New StringBuilder
    1 _5 f* \! ~8 T* o- r- l# l) f: UDim setScrollPosition As New StringBuilder
    ) m8 e  j( q& V5 Q9 y* g( u0 jRegisterHiddenField("__SCROLLPOS", "0")0 u, S2 O3 u. o) z) J3 T4 j
    saveScrollPosition.Append("<script language='javascript'>")
    / R. _- @# Z5 V! R1 p8 SsaveScrollPosition.Append("function saveScrollPosition() {")
    6 ^4 u& b/ G( o0 M6 o9 _8 |saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")% \# j- Y2 ?% `: O# b& e
    saveScrollPosition.Append("}")
    , m# Y5 F9 E$ GsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    ' }. S( M- y! E# vsaveScrollPosition.Append("</script>")
    ) ?  W* |6 Z& P% zRegisterStartupScript("saveScroll", saveScrollPosition.ToString())4 W/ Q5 P6 L2 e! h- C! ?- U3 n5 H
    If (Page.IsPostBack = True) Then
    . D" c# [# h( M' N) ~3 ^( v4 x! XsetScrollPosition.Append("<script language='javascript'>")1 C, W4 \$ L) Q6 v
    setScrollPosition.Append("function setScrollPosition() {")- k! _# m0 ^6 w% H- ]0 T* R  `0 J
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    3 k& |1 R7 L" E) s% c. ^setScrollPosition.Append("}")/ i1 a- `7 Z$ @! d1 l3 a  y7 p- t; Q
    setScrollPosition.Append("document.body.onload=setScrollPosition;")2 ~0 E6 U3 y% X: V1 ]
    setScrollPosition.Append("</script>")
    ( Y7 i# f7 ]2 H% Q( GRegisterStartupScript("setScroll", setScrollPosition.ToString())
    % J5 L% H# `" b5 |- b% NEnd If
    7 |" O& @$ j8 m9 N  GEnd Sub' B: |  [, h1 y# ~: i
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles / B( L& X1 K6 `# W* ]) U0 @2 S
    MyBase.Load- `. l7 I9 {' g+ O
    RetainScrollPosition()$ i% P" V. T8 o7 _
    End Sub 0 z; C; G' M2 t5 U/ @: V' I2 x3 W

    * Y. J/ [" I, y9 W& C- _; ^3. DataList使用不同风格的模板
    & A) N0 X; B: S2 Q  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    6 ]- P4 U4 U; f+ I& F件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个' Y- e" q5 q) R. A2 _
    元素或是加一个促销广告图等等。: a# x( F1 k9 F# g: L9 q
    Dim theme As String$ b' g, d) u3 v9 H
    theme = DropDownList1.SelectedValue
    " A, u' K- j' ~' ]0 g  S, nDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
      l' Z0 M# x7 \) a# T! sDataList1.DataSource = DS
    * Z& n2 K- _. p) l3 A1 sDataList1.DataBind()
    9 K! h6 Z" i' \* ]: o& o4 A      4. 设置服务器端控件的焦点, K. h/ B6 e, E- m  ]
    Private Sub SetFocus(ByVal controlToFocus As Control)& t5 D5 J+ v. ]0 q5 R, T
    Dim scriptFunction As New StringBuilder" T8 `9 i8 w9 g6 n9 J  h9 |* R
    Dim scriptClientId As String; ^- y" D5 N% V5 o% L
    scriptClientId = controlToFocus.ClientID
    7 ~. ^# i; V& V) mscriptFunction.Append("<script language='javascript'>")
    8 [, m3 Y. I% z9 L  A4 dscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    9 {; t; q# }3 t2 y3 Z' C4 ~! CscriptFunction.Append("</script>")- I2 K% i+ z6 g$ K  L1 J& N
    RegisterStartupScript("focus", scriptFunction.ToString())$ h7 n1 ]) n# v9 Y2 ^- c
    End Sub) x- @' s* W. k6 K9 F
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ) \) K3 c9 |* y0 v
    MyBase.Load( P7 A# {$ {! ]' `4 h/ t0 G
    If (Page.IsPostBack = False) Then* a) x0 t7 E) c" ~
    SetFocus(TextBox1)
    * h) w$ ?' }' A. l  K! i1 S2 XEnd If, s- K' Y& K# a
    End Sub 3 ]( J- \2 C% @! f* j$ m4 D
      5. 滚动DataGrid
    - m4 o2 t/ T! v, j  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只, C. I6 ~2 w. D+ F% r" N
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控5 w) B* y0 G$ l( X% q5 j
    件放在一个DIV中将overflow属性设置成auto
    : i) d- _9 r) Q8 X; t<div style=“height:400px;width:200px;overflow:auto”>! h/ F) |- k: S8 B) l
    <asp:datagrid id=“MyGrid” runat=“server”/>  J7 Y) p. D  f/ z- n$ B* H' ^
    </div>   [, c/ u! v. R) \
      6. 动态创建控件
    8 @: j6 g  s7 {* X, d  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。/ I1 [$ U/ y7 A3 v5 [: o
    Sub Page_Load()3 g' g$ B5 Q: \- f1 d2 d' _2 g" F
    Dim i as Integer
    * k) C3 c3 q! j) e# zFor i=0 to 4 , d  k$ e' B7 g% u5 {. Q8 z" ]1 T
    Dim myUserControl as Control
    * y) P. K, T( @. T! O' F: ?/ c9 UmyUserControl = Page.LoadControl(“foo.ascx”)* `4 O! K6 U' R0 i
    PlaceHolder1.Controls.Add(myUserControl)
    ; Z' d) m. B7 @; n2 p  c7 h6 m/ [3 JPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))9 L3 m* z; J, ?
    Next i
    3 u3 w) q3 l4 T9 }End Sub
    % m9 n- a; }5 I  7. 客户端代码的使用
    $ j  J1 v; z4 s# p* U) D  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标; ?. E: I+ e. p. q/ s3 z$ K: W
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    ( a: g8 q1 P5 n5 Y4 P7 qasp:ImageButton id=“foo” ) i3 X; m3 g, R+ B8 A2 i3 ~
    ImageUrl=“start.jpg”
    7 Y% g; \2 f) N  t# c' F; LonMouseOver=“rollover(this);”
    , ]  X! L, I5 e+ D, u  E1 |8 RonMouseOut=“rollout(this)”
    - O$ N( n1 }1 }  H9 m& {. prolloversrc=“myrollover.jpg”
    4 F$ @; Z3 g7 g) k0 Krolloutsrc=“myrollout.jpg”
    # b" ?7 n, r1 b  d- ]+ a0 trunat=“server”/>
    9 Y: i2 Z/ D7 i: w( v' k<input type=Button onClick=“return clientHandler()” ! C' M- G' H& O% G7 K2 q' n
    onServerClick=“Button1_Click” … /> # ^8 E8 d: K  ?" E
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    & h; W3 c# E8 ]; o2 @5 M5 ]有的客户端控件。1 ^2 j4 F5 R' t5 X& {
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles   Z7 \+ l2 m( d/ t$ W
    MyBase.Load
    3 C6 O# d7 u9 I RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    ! D' J4 ~0 X. N% fEnd Sub
    3 ~- l  W5 k2 Z. h! D/ C  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    QQ|版主考核中心|飞翔无限『经贸在线』 ( 桂ICP备15001539号-2  

    GMT+8, 2025-10-31 11:28

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表