设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    * p) C  ]& m! C求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。% k- z  I& \3 o  m$ g
      1. ~ 的用法# K. r% y2 _2 |0 g+ H- u6 E# C
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    8 q2 D0 A& I, X( k. N8 n6 I式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不! X( u( f1 r# H9 N- p. ^
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    2 `% M$ l" ~( {% _  ~/image/about.bmp ( M# U6 r8 G: x3 u
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    $ S& M, U9 b( O" A* t加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览3 o8 ]+ a, i5 H" Z
    它。% J' U9 t( ^; A; H) h% |# z
      2. 在刷新和提交页面后,保存你的页面滚动条的位置  V$ J% T: w6 S
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说7 u& ^. W" q) |
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸; B8 \, c, I, D. W0 u
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方% [0 a+ M4 b2 Z" n: o
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370( T! b8 ?$ A" g. \" F9 a- q
    个控件又需要他选择一下? " ~5 G% I4 U8 f
      用下面的方法可以很快地确定和记住你提交前的位置。
    # [4 |/ N! Q0 A( _- r  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    $ r7 G! Z3 [: N- c" h不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    * S' o9 ~% m( d% o- }Private Sub RetainScrollPosition()/ r$ r! \- g6 b* d( W) c
    Dim saveScrollPosition As New StringBuilder& e' W# h  f* k, s1 Z' v
    Dim setScrollPosition As New StringBuilder( |5 i- w$ v7 X" Y5 K0 ~9 f$ I
    RegisterHiddenField("__SCROLLPOS", "0")
    8 G( _, q' F$ ]saveScrollPosition.Append("<script language='javascript'>")
    , x) i0 H$ K2 |- F! ^4 K2 dsaveScrollPosition.Append("function saveScrollPosition() {")
    . \" {2 N6 c* I; E. H, Z/ M4 r' ?* `saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    7 {, M0 m5 F" OsaveScrollPosition.Append("}")# N7 s6 |, }: N( e/ j1 H
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    ; y  Z0 M& |# {6 b7 I* vsaveScrollPosition.Append("</script>")
    % x6 A+ N, M) F' IRegisterStartupScript("saveScroll", saveScrollPosition.ToString())- G( e" ?$ }% P" |2 s3 @: P
    If (Page.IsPostBack = True) Then" O" v! t) L* G. K& S
    setScrollPosition.Append("<script language='javascript'>")
    ! d6 X" J0 F% KsetScrollPosition.Append("function setScrollPosition() {")
    ) Y6 [* p/ R9 X' Q$ SsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    ; e$ R3 E" z0 f: RsetScrollPosition.Append("}")9 U3 E: x" d1 F& W
    setScrollPosition.Append("document.body.onload=setScrollPosition;")( v4 J0 e  P) W9 k9 f- O* @
    setScrollPosition.Append("</script>")
    2 I# c9 b# ?( q; E* mRegisterStartupScript("setScroll", setScrollPosition.ToString())
    2 M1 ~1 _9 @, b, |2 h. [# j, MEnd If# ~' V& v7 A4 h
    End Sub
    ; _7 D4 X: J8 j0 z0 ~Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ! L5 S6 o. R. n2 Z7 r
    MyBase.Load
    9 ?: H6 v0 n" ^# o: ]6 WRetainScrollPosition()7 N- L$ x( T6 p4 _& R  U
    End Sub
      h( j/ c4 P. d5 ]% U- A% x$ g. @$ Z8 t
    3. DataList使用不同风格的模板
    : {3 ^: m: S2 w$ E. Y, C' S  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条# f" G6 `- y& \! p2 W% C0 V+ B0 B, H7 V
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个/ c' ~$ B& e% w9 R. [4 m
    元素或是加一个促销广告图等等。8 E- Q& }% l  b5 Y. ?6 O7 ^  K6 ^8 d
    Dim theme As String6 ?9 G3 t' N. c$ Z2 [9 ^
    theme = DropDownList1.SelectedValue
    ! p$ i# A' e( Z& H+ j, yDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    & n0 S# Z9 j  ?) U6 ?6 ?  |DataList1.DataSource = DS5 ]0 y; Z7 h% Z) A
    DataList1.DataBind() % ~$ R" s- m+ [2 X* |3 J3 r
          4. 设置服务器端控件的焦点
    5 H. v9 V/ d4 {Private Sub SetFocus(ByVal controlToFocus As Control)2 ?/ c" y# q  g  |/ [& I* g
    Dim scriptFunction As New StringBuilder, D: |- x5 t3 {" R9 J* a; ~
    Dim scriptClientId As String
    8 J7 G" C/ Q$ `scriptClientId = controlToFocus.ClientID
    . o6 \9 B% o4 l7 \% v: bscriptFunction.Append("<script language='javascript'>")
    " J- j1 x; E4 x2 X9 zscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    ! l9 D1 M2 ?8 N5 _1 h! O- N) ?6 vscriptFunction.Append("</script>")2 A: o5 v) M$ b$ N0 n
    RegisterStartupScript("focus", scriptFunction.ToString())- y6 V; `; a0 r1 @% ^
    End Sub
    - o( H9 N8 s; j# v1 Y8 CPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 6 d4 c4 Y* a+ L% ], r2 e
    MyBase.Load' Y# R) Z  t5 j5 O9 M) K
    If (Page.IsPostBack = False) Then( j% i* c" |- q: |8 K
    SetFocus(TextBox1)
    $ Z- L" S" j$ oEnd If$ g& ^, }7 w9 V8 c6 @" d8 K+ l
    End Sub - J. g) R( a& j' k+ o* A
      5. 滚动DataGrid
    3 F; S. c8 o# R/ i. n+ e+ I  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只! T# w& \7 A& S$ ?5 {% ?0 T
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    5 k# s; n; E, M3 S8 t件放在一个DIV中将overflow属性设置成auto6 D+ E3 }' e" g* ~  z
    <div style=“height:400px;width:200px;overflow:auto”>- z- o0 ], y' L/ z% g& S
    <asp:datagrid id=“MyGrid” runat=“server”/>, Z7 h% w- x( j/ `9 ~4 q( O5 ]+ L
    </div> , D& T) ^" A5 c' ^: P
      6. 动态创建控件6 E& h" V' R9 [. H
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。- c3 q' }# W9 H( f2 K6 g2 T# G
    Sub Page_Load()
    ) l) q5 q' F3 c: j! uDim i as Integer
    . o; i9 s, T/ Z4 ]1 p5 L; F& G1 V. \For i=0 to 4
    + K3 O' A3 g9 NDim myUserControl as Control
      v- z) C6 l5 i1 M8 j: F& n% {3 qmyUserControl = Page.LoadControl(“foo.ascx”)
    0 `6 R3 R, V. X) ?5 D$ ~% `PlaceHolder1.Controls.Add(myUserControl)
    - a/ }* U4 M, z) LPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))  Q' @7 D( V) ?' R3 m  `" z( k
    Next i
    * d: Y9 o3 I% x* o1 Y, r5 LEnd Sub
    * R2 |7 k& H) d  7. 客户端代码的使用
    4 ^6 _3 Y9 Z; y7 {7 F/ Q  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标( J+ d3 J- g, G
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性( H( A. k; o6 ]# W& [
    asp:ImageButton id=“foo”
    : N' F9 U( {8 a4 S. ?1 y- h  NImageUrl=“start.jpg”
    / T1 O& a  [! K# g) U; b* conMouseOver=“rollover(this);” / z  a" c+ X0 C  W+ U: y- D0 R
    onMouseOut=“rollout(this)”' g' H1 J2 g- S' j2 N/ F. }: M
    rolloversrc=“myrollover.jpg”
    2 ~$ c+ F" z; T8 S! Q7 q  T, W# Grolloutsrc=“myrollout.jpg”$ ^* j4 |# R+ y
    runat=“server”/>& b0 O: n7 _! d. ?. E2 C$ q8 H
    <input type=Button onClick=“return clientHandler()” 6 d1 r/ U! R; a9 G4 m5 ^6 N
    onServerClick=“Button1_Click” … />
    # v* E9 v+ s' _2 P  r! T  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    0 P) c' f  c5 j8 j- n% u2 e有的客户端控件。9 |" e! S( X4 i4 g; H# W! p
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles 3 _1 [  ]% P( v
    MyBase.Load
    , t$ H, |% ?1 O# O RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    ! k' \/ I% a, q( v2 H9 e7 ^End Sub ) a" P% @5 K. [. {
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-6-24 02:26

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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