设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需) _" _5 y7 g+ G* Q/ w
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。6 d! [3 }/ b3 f  ?' ]7 C
      1. ~ 的用法
    , V( E4 o" R8 R! W+ w5 B6 Z, f  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    ( W  k7 U  g0 _$ ^/ x5 f9 ]式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    1 e2 t; l( T# l7 R同层次的两个目录的aspx文件分别引用时,问题就会出现了。( v& ]7 n7 ?$ a, c
      ~/image/about.bmp 3 t$ c% V! f5 J9 I3 q. U
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    % r- k" T0 D5 H, I3 M- S加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览; }- w- q' @, Z& W5 F7 v* K4 k& n
    它。# r" [5 S% R  g
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    % t: _5 B0 W0 y# H& D  l( m  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    ! v% B; b, ~, u7 V7 U0 J用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸- t; B5 s0 P( m) Z
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    ! F) R& N  r2 v9 w也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    $ j$ A5 Z- @3 w2 r个控件又需要他选择一下?
    ) g) T, E% _9 |+ w0 k* e  用下面的方法可以很快地确定和记住你提交前的位置。
    7 w$ T& W6 M/ s: r/ W- U  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    7 }3 I) F! [/ q( c8 D- p* C不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    ( w( i- c) D6 [% G0 h) R8 {: pPrivate Sub RetainScrollPosition()
    8 B% s# H$ E, J0 W5 H1 w) s$ iDim saveScrollPosition As New StringBuilder
    , n0 R, ?+ {" Z% ?  T  X! K3 K& DDim setScrollPosition As New StringBuilder
    5 A- a" j; }+ i, s3 Y* YRegisterHiddenField("__SCROLLPOS", "0")8 j* d7 F( M3 q7 H+ i( s
    saveScrollPosition.Append("<script language='javascript'>")- Q3 w9 p/ ?& E2 \$ @$ C7 m
    saveScrollPosition.Append("function saveScrollPosition() {")
    ; F2 y" a5 S# m0 `& Y$ h# j4 WsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")3 _, T( Y1 t1 U4 }) k% A; r+ L
    saveScrollPosition.Append("}")
    - g2 {% y% Q6 \) p, v8 h1 [saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")7 p7 d+ E! o& T1 t+ R+ K
    saveScrollPosition.Append("</script>")
    & d# J+ D& M6 O) O$ jRegisterStartupScript("saveScroll", saveScrollPosition.ToString())9 g0 G3 Y4 k  }4 b
    If (Page.IsPostBack = True) Then
    , H! B0 V% c( U" ?! YsetScrollPosition.Append("<script language='javascript'>")
    ) X; N2 M: ~; `2 }# R/ h9 x  }setScrollPosition.Append("function setScrollPosition() {")7 [; @+ c  d" ?+ D# p- i) l
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    8 y/ O& s. l* j/ T' n5 @# z6 CsetScrollPosition.Append("}")
    , N3 ]3 B* \9 V+ asetScrollPosition.Append("document.body.onload=setScrollPosition;")
    * z. u& E0 f7 o% L( S/ WsetScrollPosition.Append("</script>")
    " s" c& i0 E# [  {% NRegisterStartupScript("setScroll", setScrollPosition.ToString())+ P# u: ?  J. l3 U9 H* N
    End If
    # g9 r( ^* v6 r; \2 v3 ~% g/ _* k- R8 pEnd Sub3 W, K, Z7 E4 T! y
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    3 w" w' i7 e: t. u4 l, b2 c7 qMyBase.Load6 K! Y% j+ Y; j: {
    RetainScrollPosition()" [) t# n  \0 o5 B2 B
    End Sub
    2 N8 V2 c. f& k' `8 l" J1 c; T7 x- W/ A, h" Q3 l9 C
    3. DataList使用不同风格的模板
    2 c3 n  `% X' S2 W8 R0 @5 \9 ~  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    9 w6 q: P( ~& l; E9 z件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个# p+ {. n$ h+ h" E! `& a
    元素或是加一个促销广告图等等。
    / I2 r0 E8 u' G5 q/ T; F7 `Dim theme As String
    + e) f7 V* n3 |. Qtheme = DropDownList1.SelectedValue8 ?$ q. m5 [, g: x9 M
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool! f8 }6 b$ \. a! w1 R: Z
    DataList1.DataSource = DS- N# j8 |5 z& q; l" [
    DataList1.DataBind()
    " x* y5 L0 y. W      4. 设置服务器端控件的焦点
    : ]: M; I* I" J5 A0 w) @0 CPrivate Sub SetFocus(ByVal controlToFocus As Control)
    4 A" A) j/ J( p8 a" U* pDim scriptFunction As New StringBuilder
    8 B: w! o! _) }  c$ WDim scriptClientId As String
    + K( z; q  s+ u2 ]scriptClientId = controlToFocus.ClientID
    5 t" E4 M/ b, A7 r2 VscriptFunction.Append("<script language='javascript'>")& g( w% \6 l5 Q' H# k( x; j( S7 B1 j
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    1 j9 z, j  a- K+ Y# ]scriptFunction.Append("</script>")
    5 @: W- [$ n. fRegisterStartupScript("focus", scriptFunction.ToString())
    . L% ^9 ~& K# A8 u1 J- ~End Sub; d' {8 I+ R2 W9 b7 X
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    ' }+ h9 k- Q  f( |- T: a6 T3 }7 Z) C' {MyBase.Load/ t$ v* f0 n7 Q3 V  W
    If (Page.IsPostBack = False) Then/ I: q% V) B% X; H) J* _
    SetFocus(TextBox1)
    3 S2 ]9 U9 l) a8 pEnd If1 M8 y: `2 b4 H( k0 r3 w
    End Sub 5 A4 G( K$ W! K" E- S
      5. 滚动DataGrid0 I7 H6 k) c. `6 Z6 r& P
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    - B4 k# z. `3 O! a9 _; W有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控  B$ x) t: l% Z
    件放在一个DIV中将overflow属性设置成auto
    + f: V  u5 u6 ~9 K<div style=“height:400px;width:200px;overflow:auto”>3 |; ^/ x" q' [8 {6 q
    <asp:datagrid id=“MyGrid” runat=“server”/>7 {' _- I) n/ j0 V3 B
    </div> 0 T, t3 t, L- u7 U9 o2 t# C
      6. 动态创建控件
    : l6 c* R( j& l. B  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    8 T( i& W/ G1 w# ~Sub Page_Load()# Q' Z% P4 O7 [8 F  D9 \- b5 t. r
    Dim i as Integer$ o, t" c4 v$ R1 w
    For i=0 to 4
    ) K6 G4 B! z! W- _: uDim myUserControl as Control
    ) E& w4 j8 E: o3 R9 m, lmyUserControl = Page.LoadControl(“foo.ascx”)/ M5 U% O, g( G6 D
    PlaceHolder1.Controls.Add(myUserControl)
    1 E8 J! W2 e6 a8 KPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    - c8 I* B1 N2 U, d- f/ KNext i( j1 o6 i- y8 c5 h' e$ C
    End Sub # x- ?* G: L- ~& O
      7. 客户端代码的使用
    " H4 V" M: v4 c* H1 M  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    ( ~4 e, U6 d$ g9 b' `$ ]- l2 X8 r准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    ) G' L" d+ w6 ^5 X+ Jasp:ImageButton id=“foo”
    0 s( X  i$ k% i1 I# ]' rImageUrl=“start.jpg”9 K7 D3 G" d- h' I# r
    onMouseOver=“rollover(this);”
    ; r- A9 j; v8 |) u8 v& eonMouseOut=“rollout(this)”- a& @2 b% v- F' v- l) q' M
    rolloversrc=“myrollover.jpg”+ k+ e- P. B' S! o3 Z+ j
    rolloutsrc=“myrollout.jpg”
    6 p. R! d% i# X! S8 l. Wrunat=“server”/>
    , R/ O5 Z5 W, {<input type=Button onClick=“return clientHandler()”
    + w, }( L: A5 @, ~6 \onServerClick=“Button1_Click” … /> 4 D! i/ c* }& g. l+ r0 h3 ~1 r
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    : S7 P) {3 P( ~5 p1 y$ t有的客户端控件。
    % Q. A4 n& x; w' j; k6 WPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    7 z: z0 A1 P$ f( C' K* ]. v- WMyBase.Load
    ) t! I& j& f8 ^% e2 b, d RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    & B, {0 `; q" t  O0 bEnd Sub
    & c4 F1 N0 _7 ~- V6 A1 x2 X* j+ {; X8 E  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-9-10 15:08

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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