设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需6 B7 d7 A( x; z7 y  @; c) t, v6 o
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。1 {6 h, r% c& l9 [+ ?
      1. ~ 的用法
    5 _, H! S' u- @4 a* G6 Q  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    + l5 f8 l4 n; u" G* ?9 W# F式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    ) ]9 Z+ K: T: Z" [# z' ~同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    8 a% p3 l( A+ o6 W! Q1 L# R% [: g; V" \  ~/image/about.bmp - K* V* [6 K1 z4 s
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更& t3 e/ Q4 b$ _  X# W! w' \
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    9 ~! o# V& D* E+ K它。
    7 _% S7 J' q9 O6 o. c' X  2. 在刷新和提交页面后,保存你的页面滚动条的位置
    + n! J, J' p9 n3 J; f& A: c  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    " P, J/ o# o3 W9 F" f" C7 m用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸/ ]2 _% @  ?% _+ n! E' q
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方* x9 N1 y' b4 g  ~: n0 l% X& t3 p
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    ; \9 n+ N" s- y个控件又需要他选择一下?
    ( [6 N: ^/ a! X- S* g9 r  用下面的方法可以很快地确定和记住你提交前的位置。
    : {! P$ g& Q' I* q4 ^) r. _6 z  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,% E8 R- Q/ j1 ?6 _
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件1 E% A% O9 E# n2 D8 Q7 g, _0 H
    Private Sub RetainScrollPosition()
    ' l  e; J5 _% v2 E: ?" dDim saveScrollPosition As New StringBuilder0 a: x, g  o2 J+ Q) G- V8 Q; F
    Dim setScrollPosition As New StringBuilder/ X9 i- x5 J/ A
    RegisterHiddenField("__SCROLLPOS", "0")
    $ `/ |/ I3 o6 XsaveScrollPosition.Append("<script language='javascript'>")8 {- z1 q* f' ]2 [9 X/ E
    saveScrollPosition.Append("function saveScrollPosition() {")
    1 ?, C0 k6 l! }" f+ j2 fsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    - E) p0 x0 _( [saveScrollPosition.Append("}")1 e8 U/ F" \' Y5 l( T* G
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;"); X/ I. R- F* h( G) h
    saveScrollPosition.Append("</script>")! R$ y  ~- R; j2 E+ F
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())' C3 f9 ?' h! t( s
    If (Page.IsPostBack = True) Then
    : f$ t( x: p8 A  B6 j* R9 a4 dsetScrollPosition.Append("<script language='javascript'>")
    3 j# T9 _' f9 ?0 s! |( BsetScrollPosition.Append("function setScrollPosition() {")
    # @8 ~7 g- P* ~setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")' I8 i1 m$ z2 C. q+ Y
    setScrollPosition.Append("}")8 W" r& c- X4 X( Y# A6 j0 j
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    4 u. `2 \- H% T: BsetScrollPosition.Append("</script>")
    4 t) X, n  @$ r6 aRegisterStartupScript("setScroll", setScrollPosition.ToString())
    6 P5 i# m; H/ a0 L9 ?End If+ l- X0 k$ s& K. J2 n/ ~/ L
    End Sub/ N0 F  j" v2 v
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    5 E6 O0 r3 i7 h9 M4 G! n+ QMyBase.Load. q5 q* `* _1 q: |% c
    RetainScrollPosition()
    ; H7 B2 Y  [# d2 kEnd Sub " N7 ]' Y" b4 r+ u3 N4 [4 A1 _
    5 A) X& U8 \! U# }% d
    3. DataList使用不同风格的模板
    , d! F" ?7 C! B1 r  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条* d! s& K6 |+ I4 g4 H- H! S- S
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    8 H, l. B- ]7 V3 u+ i元素或是加一个促销广告图等等。! l  P  ]( W4 Y- V; m; G1 }
    Dim theme As String! a- e+ t7 ?# b8 D$ T
    theme = DropDownList1.SelectedValue
    7 }% `6 f) u# ]3 s2 |" \" U8 PDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    9 \/ q4 l% s, R0 j' v$ J: J' ?DataList1.DataSource = DS$ s) L! m0 N2 A4 c
    DataList1.DataBind() 5 Y3 Y6 q" n0 J2 y. n- ~2 K$ H7 e
          4. 设置服务器端控件的焦点2 X/ ^& H& M7 ?" b
    Private Sub SetFocus(ByVal controlToFocus As Control)
    8 k% a6 M; V# Y4 F% |Dim scriptFunction As New StringBuilder
    ; m9 S9 ]7 w' _Dim scriptClientId As String8 |! w* i0 D( E& z. Z6 W1 Q
    scriptClientId = controlToFocus.ClientID, L7 B! K! C  p8 F3 _; g
    scriptFunction.Append("<script language='javascript'>")3 d# I/ W8 V% L! X2 s$ `
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")9 W" d6 n* w6 k$ ]% |$ b, R
    scriptFunction.Append("</script>")
    0 z7 Q! o/ C6 T$ Y2 ]* ERegisterStartupScript("focus", scriptFunction.ToString())8 g( Q: r2 P! u. @
    End Sub
    9 v. F# v3 f; E" A2 ^* dPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 2 S6 C. t: Y+ ^6 ?/ Z* S
    MyBase.Load" Z- ]  i* B9 o5 G  Z' R
    If (Page.IsPostBack = False) Then
      C6 M5 d  b3 N3 F, M8 e# vSetFocus(TextBox1)8 d/ I7 e+ H, ?* r
    End If$ A. O" Y" e/ ?/ h
    End Sub
    * d7 J3 @4 b" r# j3 ]" N  5. 滚动DataGrid- e# V5 U- h: P2 x
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    2 ~- E! X, N5 \! [1 Q有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    / V( S! c" l* Y& ?( t  p# ^件放在一个DIV中将overflow属性设置成auto
    & x) s1 K. {6 W0 z<div style=“height:400px;width:200px;overflow:auto”>
    * O9 M$ ?% _( N* q( `) ~<asp:datagrid id=“MyGrid” runat=“server”/>  I4 w8 e, k1 l8 R4 d( ~
    </div> # Q! U" P; W( T! ^' C
      6. 动态创建控件2 a" N1 V. }( X2 R" W
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。! D% v7 Y" Z8 ~4 C* f& N2 z
    Sub Page_Load()5 y  W6 ?# p4 T1 l
    Dim i as Integer* v, |; M2 Z9 c4 B0 D2 t# u
    For i=0 to 4
    / n* P( z+ |* L# d. R$ N, b2 }7 [Dim myUserControl as Control
    & Y/ \+ U: r6 QmyUserControl = Page.LoadControl(“foo.ascx”)% ~  k+ U& V) ^8 m% V, I( D
    PlaceHolder1.Controls.Add(myUserControl)2 |4 o- O1 A8 j$ r' Z
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    6 o4 Q2 [3 d1 s. a5 I7 _Next i; W- y  r& a3 I* M, t
    End Sub + E, O+ _" ~5 W3 d
      7. 客户端代码的使用
    ( u, R" @& J' I7 Z7 Q# m6 X! i  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    " D5 E* c- `1 R% {9 A2 E% y准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    4 }. E3 u4 a) G7 f) w0 }asp:ImageButton id=“foo” ) |- W  c- X8 i& J, G4 s& N/ O
    ImageUrl=“start.jpg”4 C9 v/ @: ]0 ]  I+ R
    onMouseOver=“rollover(this);”
    7 [# K* O. D7 N2 p' L, AonMouseOut=“rollout(this)”7 w: l- T; f; O0 b0 f2 J- R* x
    rolloversrc=“myrollover.jpg”
    ' P8 W* m# _; V0 e0 {4 A( k5 \* prolloutsrc=“myrollout.jpg”' K7 E& o2 }! ], P: w3 G
    runat=“server”/>
    - @/ _' i8 |9 y7 k' \9 A4 |<input type=Button onClick=“return clientHandler()”
    0 [% _$ ~) `/ Z4 B* aonServerClick=“Button1_Click” … />
    . J# p' q/ |9 w$ j5 R  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所4 p3 G* v6 N1 Z4 u; R
    有的客户端控件。
    & x2 f* U) \4 t/ o. C" O, fPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles ) ?. v6 u+ I5 p5 d3 t5 R
    MyBase.Load" q; k  C  ?: w0 k2 x" s
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")- e4 k/ I9 t) L8 z! c$ E2 y
    End Sub
    . b! f8 l, w5 s3 F% H  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-8-4 05:08

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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