设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    & N4 ]. m- j! _求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。* ~$ P4 e" I: b; p
      1. ~ 的用法
    ) v' c# y. e" s  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    ; u- Y3 t# o& P% F+ r$ e式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    ! z& m$ ^3 z+ Y- p0 ^3 h$ C同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    ; a2 [. Y! b5 J* X$ A9 l( h  ~/image/about.bmp
    : d  f" g4 l6 r4 `. G是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更3 H2 }) `! k, B9 P: C
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览$ q* X* l0 J' I5 W9 U2 w
    它。
    7 A' i- B6 a: E' t. N  2. 在刷新和提交页面后,保存你的页面滚动条的位置
    * [% t* Y; u0 @2 {3 L8 g' y# K  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说# {9 n4 R4 K+ B& c1 d8 w& X
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    ; C9 {0 b1 D" z% i+ ~# n组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方: D# H8 T2 P' g0 R
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
      D! a$ M. o1 [个控件又需要他选择一下?
    ( Y4 ^  I3 s* i9 k9 O  用下面的方法可以很快地确定和记住你提交前的位置。
    , e- x( y# A) t+ A  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,) ~; K+ ]/ ]& U0 Y
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    5 A' ?; {. f9 T$ w. BPrivate Sub RetainScrollPosition()
    7 N+ u' H* w5 P# E; kDim saveScrollPosition As New StringBuilder  m" v5 @8 W: @4 a/ A$ h3 N
    Dim setScrollPosition As New StringBuilder
    0 K5 Q1 `7 e/ O. x/ dRegisterHiddenField("__SCROLLPOS", "0")
      u0 J+ @2 M3 J2 gsaveScrollPosition.Append("<script language='javascript'>")
    2 g; N8 B7 L7 Q5 D+ K' H6 k# Q6 OsaveScrollPosition.Append("function saveScrollPosition() {")
    . t* J3 _1 _/ W0 ssaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")0 w1 |, o0 p4 ?. a# [
    saveScrollPosition.Append("}")+ Q$ P! w4 b$ b2 m, r; X
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    0 r9 z7 O# L" g2 k$ {7 T# jsaveScrollPosition.Append("</script>")
    5 J7 ~* z) K! A6 pRegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    3 q2 J' V/ O2 M$ |If (Page.IsPostBack = True) Then+ U: E* Q% R& F) Y! z, W1 V8 Y- D0 S
    setScrollPosition.Append("<script language='javascript'>")# I/ t  Z4 n$ w/ n. E
    setScrollPosition.Append("function setScrollPosition() {"); [. d& W# U4 Q% f0 ]
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    7 Z  [" `) \5 Y4 WsetScrollPosition.Append("}")% Y8 n. `4 C* f) a8 [: |- |
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    % d( m7 m: Y% K; W  nsetScrollPosition.Append("</script>")
    , c/ V9 t( h: x$ |9 ERegisterStartupScript("setScroll", setScrollPosition.ToString()): C2 J+ X1 \8 W; ~+ K2 w6 i9 O
    End If
    , ], l' G) C" f$ V; Y9 bEnd Sub1 B& w/ B- z; T! f
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    ( V: @5 @* P/ [( _& lMyBase.Load
    % p' }  B! Z7 ~4 z. o" x7 bRetainScrollPosition()
    3 ?7 Q5 Q# z& eEnd Sub - T8 C3 c8 ]( W5 w0 K

    . L4 w2 u& A% I( e3 M5 N2 S3. DataList使用不同风格的模板& R* [. g' ~" ~- K7 f0 M" V) d
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条. k. [' ]* [: S+ i
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    ! B. x6 }. R& B  B, [' k元素或是加一个促销广告图等等。. P1 c( S2 g" @( ~) s
    Dim theme As String
    3 O% `9 Y7 o& n8 I+ ntheme = DropDownList1.SelectedValue
    + P  F. B1 Q% i; J6 _0 Y3 jDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool! c9 A3 x5 z/ ~9 r3 u
    DataList1.DataSource = DS
      F3 z! T, u7 R- ^4 ?, w- MDataList1.DataBind() 9 B- R5 K! T2 e
          4. 设置服务器端控件的焦点
    & V" [0 |) K/ c1 ~4 _* P. l9 XPrivate Sub SetFocus(ByVal controlToFocus As Control)
    9 N+ b4 i; ?; K$ X4 l+ j/ mDim scriptFunction As New StringBuilder, O2 b1 K' o7 s5 H' L& x
    Dim scriptClientId As String
    - g. Z" [% [, x7 N# {scriptClientId = controlToFocus.ClientID
    ( D1 q- r' P2 Y- sscriptFunction.Append("<script language='javascript'>")/ R  l* Y' I! f4 a3 Y0 H8 Y
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    $ S! ^& j0 N2 z1 {6 OscriptFunction.Append("</script>")/ n, |& _3 T1 \( D6 M* W
    RegisterStartupScript("focus", scriptFunction.ToString())+ u8 D7 Y7 a* d3 S( G% H1 X; ^
    End Sub
    " S0 I6 T  _2 C. V7 H4 RPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    9 }$ v' {* n9 M2 z( n1 q. p9 NMyBase.Load
    2 a3 I0 N, t0 ]: RIf (Page.IsPostBack = False) Then6 }$ p- C. x& Y) E! x' ^4 R
    SetFocus(TextBox1)
    3 `% [8 h; C0 Z& K+ k$ lEnd If4 j$ k% {& ^$ h- J
    End Sub
    : Y! p% I, d2 R8 {, G9 V9 t" c3 w3 O  5. 滚动DataGrid2 `  f) Z7 }- o+ l- h) D
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只- h0 x) P+ I: K: h1 R$ Y
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控, r1 w6 ~7 Y+ Y% x: o
    件放在一个DIV中将overflow属性设置成auto, S, d0 \/ `$ A: G: o; g
    <div style=“height:400px;width:200px;overflow:auto”>: }1 |4 L; [/ E
    <asp:datagrid id=“MyGrid” runat=“server”/>
    - ]& C: a9 t2 }" `; ]1 r</div> 2 V  q- H2 G/ S
      6. 动态创建控件
    * \. S9 h% `7 \* o1 }% E  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    ' F; F/ `, U$ v5 O* @9 hSub Page_Load()
    % f4 s+ R! q' o0 v+ \Dim i as Integer- ?& P5 S& \! D
    For i=0 to 4
    7 ~! Q$ r# N4 d9 j: Y) q" kDim myUserControl as Control
    4 d/ _9 m8 |4 X0 n! T7 ymyUserControl = Page.LoadControl(“foo.ascx”): F0 e$ B2 Y. |1 B$ [/ ?2 v1 k) q
    PlaceHolder1.Controls.Add(myUserControl)$ \5 H* B9 t: J- {! o
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    * G. W* O8 C+ H* MNext i
    # m0 H/ y1 L  s. F5 m6 D* R8 zEnd Sub ' F& k! j& C7 f- @7 Y2 n* T$ _: B
      7. 客户端代码的使用- G! p  t$ ]% B# }
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    * z: V* y1 W! B$ T/ N( g' D准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    . J/ q$ L3 Z& T- oasp:ImageButton id=“foo”
    6 [4 ^! y8 \, U- jImageUrl=“start.jpg”
      E6 T  z& p) J: N7 J$ L- FonMouseOver=“rollover(this);” ; I" t5 {+ `# X$ T2 N7 D. X
    onMouseOut=“rollout(this)”. e# T8 m* F5 C' n$ a3 k
    rolloversrc=“myrollover.jpg”
    " M5 {7 v& _" Wrolloutsrc=“myrollout.jpg”
    $ l# y& p$ M% N9 g; Q4 a$ Wrunat=“server”/>
    ) ?) f9 E1 h5 A. f! L<input type=Button onClick=“return clientHandler()”
    4 Q$ t: g) Z( w; GonServerClick=“Button1_Click” … /> ) `+ S: L7 D+ Q" f! ^" z0 O  o
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所- a" J6 \0 }3 p, V  I. X+ j! `
    有的客户端控件。
    # S7 m0 ]! N) ]Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles   W2 y, M( U( J
    MyBase.Load$ W7 |3 f( l& W0 r; ^  r
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")8 ^  }* M, z, U/ Q. r5 v2 K; G
    End Sub
    ' }' x" M7 M- [+ x1 N7 d  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-10-31 14:47

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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