设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需$ S  }. @( z; y
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。. f  E2 `' G& ?
      1. ~ 的用法
    / I8 C5 }5 e7 K; m. @  b; S  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方2 r1 V$ Q1 F1 R# I' a9 W
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    % l" H/ ~8 N( ~# d, D0 U" x- }2 J" j同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    ; I: H+ |; Q4 f  ~/image/about.bmp
    7 }0 [& d2 L! n- ~是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    - ]! u/ |/ o9 N( c7 x加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览. R$ S7 N5 h( R5 x+ y7 F% v2 k
    它。2 U$ d* b) ^) B0 K5 b$ B& A9 E/ B
      2. 在刷新和提交页面后,保存你的页面滚动条的位置+ {0 n- S% Y' [. y5 p
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    # s/ O  E5 T6 C* \0 s用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    7 X& ~# f: h! |! u% K& d4 |" X组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方3 d; s, m( ~% e% M( D/ B& C
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,3705 M; G/ x8 c% Z$ P
    个控件又需要他选择一下?
      ?2 j" Q, q9 b# C- a  g; C: |  用下面的方法可以很快地确定和记住你提交前的位置。! q- {# X- C- e" Z1 \
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,( Z  C9 J" w( R* U$ q7 l7 y
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    * Y" I% |+ I+ o, YPrivate Sub RetainScrollPosition()$ K$ w% m/ ~+ ^. H) g: ]  \
    Dim saveScrollPosition As New StringBuilder  i) W, R- ]; K( D* K
    Dim setScrollPosition As New StringBuilder8 m, Y" y% `8 O) S2 S8 q  |
    RegisterHiddenField("__SCROLLPOS", "0")
    7 o# U$ c, A8 I- Z$ t6 PsaveScrollPosition.Append("<script language='javascript'>")( w& W7 y  _2 j4 ~8 `  m/ C
    saveScrollPosition.Append("function saveScrollPosition() {")
    + L8 Y; @& U' ^saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")  |$ b# P0 I. V, i1 K8 L) x
    saveScrollPosition.Append("}")
    ! f# I9 `$ R8 {7 I# z' FsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    3 b. K4 S3 e! o8 Q1 p" F# Y: FsaveScrollPosition.Append("</script>")5 f, e' h* P4 a& T
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    ( r8 T1 t& `( W# b$ y+ {) VIf (Page.IsPostBack = True) Then
    : i! z- ]% O3 t& `setScrollPosition.Append("<script language='javascript'>")3 ]' L" \" D, A8 ~
    setScrollPosition.Append("function setScrollPosition() {")
    . v4 H  a7 i; X) R0 g" @4 [- f: xsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    3 W; U  ~$ N/ S2 Y& ?4 I* OsetScrollPosition.Append("}")
    ) {2 _$ N( E6 w: BsetScrollPosition.Append("document.body.onload=setScrollPosition;")$ O" d3 g& V8 M0 L/ B
    setScrollPosition.Append("</script>")
    4 F! S. H1 |. _- k7 ?& yRegisterStartupScript("setScroll", setScrollPosition.ToString())
    ( \  c! J% F1 K3 ~4 L1 JEnd If, m. V9 |; p: ]% H
    End Sub
    2 C4 a2 [7 d/ P2 G$ XPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ; O% G- R9 J+ o3 u
    MyBase.Load0 W" N7 F3 E4 `! b* A; e
    RetainScrollPosition()7 }! y  w( N7 {
    End Sub
    3 P) j9 W( [) p; v! `. @* A0 q3 r# q9 ]: E
    3. DataList使用不同风格的模板
    - i, a- S4 T7 I6 l2 D( N0 {8 f6 }  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    8 Z+ v: A9 E  \件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个/ B: O/ C/ h9 C- u; s, n: {- V
    元素或是加一个促销广告图等等。
    / y8 ^8 ^; q' RDim theme As String
    4 p1 }0 N5 B( p5 l' atheme = DropDownList1.SelectedValue
    0 v' U( H% p  |$ X8 |; K' ODataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
      x, e1 }  n2 d9 p$ [. o3 ]DataList1.DataSource = DS- ^  W' N# s' P4 q9 T$ I3 ~
    DataList1.DataBind()   `& X/ N+ }, F+ u) k9 k# p
          4. 设置服务器端控件的焦点) c7 ], s& N, q; U9 E
    Private Sub SetFocus(ByVal controlToFocus As Control)5 r! r$ B: t' U5 c9 B% v
    Dim scriptFunction As New StringBuilder
    7 d: P1 e. B1 t: A; r! eDim scriptClientId As String
    # f5 U- E$ |0 G! D) R9 |5 w9 g0 PscriptClientId = controlToFocus.ClientID* j$ w% G9 Y+ B' \0 j* S5 x
    scriptFunction.Append("<script language='javascript'>")4 j5 y# ]$ w0 T, B2 w& w
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    & G9 x- o6 B+ R3 l) jscriptFunction.Append("</script>"), b& c5 u$ v$ k. \
    RegisterStartupScript("focus", scriptFunction.ToString())
    1 |; s5 |/ u1 W$ t2 N$ qEnd Sub: v: m0 j( k, S3 V
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    5 v! c1 n5 ]1 c% v( Z# yMyBase.Load
    + a8 n* d+ G+ V; m8 ~2 v, OIf (Page.IsPostBack = False) Then
    " F6 e) p. C( FSetFocus(TextBox1)) }3 m( p- V8 Y! D/ C5 s8 g) R
    End If# d, P7 N% m( J6 O: c
    End Sub 6 o2 x/ \& |7 X+ P% ?
      5. 滚动DataGrid
    " Y# O9 ?9 K6 ?6 L/ r  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只4 U0 \6 m8 T+ C# ~# x( M, d
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控& X2 X6 F- g" H& O, T
    件放在一个DIV中将overflow属性设置成auto  P* j/ T2 l3 v! ^
    <div style=“height:400px;width:200px;overflow:auto”>$ \) |5 r# _+ r4 R" T$ ~
    <asp:datagrid id=“MyGrid” runat=“server”/>
    + ]; m4 Y+ E; V( _</div> : L, h5 G- U' z; @! e8 x/ S
      6. 动态创建控件, ^, h+ F. y, {3 n& y, N
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。$ n7 C% ^3 A4 r; H* i( d6 X2 K# P
    Sub Page_Load(): H! T# I& y; {; Q3 G- E$ _/ h
    Dim i as Integer
    & q4 M" H' Q: k/ S: }For i=0 to 4
    : V1 o# A; ^" b1 E2 bDim myUserControl as Control) W* W6 n2 J* S+ G; X
    myUserControl = Page.LoadControl(“foo.ascx”)
    & `3 Q) o5 l4 y) |) e1 UPlaceHolder1.Controls.Add(myUserControl)
    2 [! `) ^' h* R2 o5 W' Q: v4 Z  L2 dPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    - J8 `, m( Z7 @/ ~. P( ]Next i
    4 u; V+ ?( v% T  bEnd Sub % z2 i, \5 o& N: ?) M
      7. 客户端代码的使用6 f3 i1 O' k& c2 V$ H
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    0 j" P  K2 ?0 P3 h' \准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    # V& `: Q' h8 \1 x, Y. D5 ^asp:ImageButton id=“foo” 2 h# c7 y0 b2 R
    ImageUrl=“start.jpg”
      N/ J3 j/ \; E4 BonMouseOver=“rollover(this);”
    6 z$ h+ n& u7 N* e  v! U1 IonMouseOut=“rollout(this)”
    2 Y8 G* [' Z4 L- a1 I3 qrolloversrc=“myrollover.jpg”' u7 U/ \# a( D# {
    rolloutsrc=“myrollout.jpg”# f# v+ T2 V; G+ ~  \" O
    runat=“server”/>
    3 @5 w7 ^! F" N/ u" u<input type=Button onClick=“return clientHandler()” ' F& X. m7 W% y
    onServerClick=“Button1_Click” … />
    + _, q/ B6 V5 x/ J. X  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所  d' u% F$ {+ F
    有的客户端控件。
    & Y# d0 w/ F  Q* X6 c) _/ RPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    9 }* }: x6 p* J) i$ I& A7 d: [MyBase.Load0 @  f: q, G) f6 b) C
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    1 Y& y+ m% o, h5 WEnd Sub 8 f. q$ g- ^5 E; e  R
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-5-7 18:16

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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