设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    * y8 _$ S( C7 k求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    : o% J+ P- `) W. I+ C  1. ~ 的用法
    5 F3 P" z7 F' [) Z! B  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    + o& f) K; X" {0 \: ?2 Q式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不- a$ W3 ~4 `; C9 d
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    ; ], @- r! T. h1 o  ~/image/about.bmp ' Q# g  x# }( Y; y, V4 e0 y5 h
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    9 \$ T  y6 r" h& ]* g. M: C加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览8 }, V5 {# A8 |+ A: _5 Q
    它。
    . `8 e% d6 l. |  2. 在刷新和提交页面后,保存你的页面滚动条的位置! K: |& M% _7 w, A- {" i: ?1 R
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说8 M* Y0 L9 e* i7 v: a
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
      K& r( Q* d1 E6 E* q0 U7 E; o组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方4 R1 B' `; V( R4 I
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370# b1 F* {) T$ z0 L' w. _. y  c
    个控件又需要他选择一下? 5 Y5 S) j8 f- |2 }5 w" K, Q- _" e
      用下面的方法可以很快地确定和记住你提交前的位置。, f" T* ^5 u% @9 L% g, l' }
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,  V; d/ I2 c& @5 e6 _( r) V
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    0 `' a2 b3 w6 ]' ?3 X, SPrivate Sub RetainScrollPosition()% X( i1 q4 W% H3 l- O
    Dim saveScrollPosition As New StringBuilder- N, X, N/ ^; e# e4 u# p' T
    Dim setScrollPosition As New StringBuilder
    2 m0 q" K7 T. L2 \' qRegisterHiddenField("__SCROLLPOS", "0")4 f% _1 B- L- }4 G# O
    saveScrollPosition.Append("<script language='javascript'>")- h- u' i, L3 G: {5 x7 c
    saveScrollPosition.Append("function saveScrollPosition() {")
    : v9 K1 S& ?6 b$ H6 I; Z( o3 [2 W! EsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    9 ]/ u6 W/ i! B$ y. WsaveScrollPosition.Append("}")
    6 p' V9 A' w! J" ^& b9 x, DsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")  M9 j3 Y+ H7 ^* |- m# d8 |
    saveScrollPosition.Append("</script>")
    ' |# r* b6 I) l4 {' |( {1 BRegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    ! m$ w5 _! Y5 d3 HIf (Page.IsPostBack = True) Then5 N2 l/ |4 z7 [' I! D* b
    setScrollPosition.Append("<script language='javascript'>")
    ) C: s8 V1 {, lsetScrollPosition.Append("function setScrollPosition() {")1 s% E& K# Y4 ~
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")3 q# z+ R: b# w/ k0 c
    setScrollPosition.Append("}")% ?( k! ?$ D$ ~' ^" P
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    & Q7 c9 u8 Y7 \- X; c$ I0 j( t+ m; BsetScrollPosition.Append("</script>")9 N- _: h; q7 g- k6 ^3 ]. G
    RegisterStartupScript("setScroll", setScrollPosition.ToString())5 L4 Z" o. |. \; G
    End If
    1 Z2 @9 E* @* I, G# Z  t; ^8 J( cEnd Sub4 V* H1 K4 G) p0 W
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles . H/ g, R, U4 U$ n' e, X
    MyBase.Load
    2 u6 ?8 R( R# H5 b7 }8 m. hRetainScrollPosition()
    ; }; C- i7 A% @$ v5 ?- TEnd Sub
    ' h3 Y' X* q% e( C) S; x  f
    ( A' b- a% ~$ [; `4 j. c( y" n* z& F$ c! H' Z3. DataList使用不同风格的模板
    1 \: X, e4 G: `& f1 K1 s  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条* e$ a/ y7 S9 A
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    - C$ E& w9 }1 d. d  {: X1 o* F8 l7 F元素或是加一个促销广告图等等。
    * l; k6 S  g7 ?1 N4 P: D1 C. yDim theme As String* z; [) Y. f/ g3 D1 s, T9 l% l/ ^1 a
    theme = DropDownList1.SelectedValue
    # U5 Z# ?4 S* a9 H9 tDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    + Y, t+ h) {( F# FDataList1.DataSource = DS; T. @( V6 q0 I: q  D
    DataList1.DataBind() . }6 ?1 z! X% |( _$ w: l
          4. 设置服务器端控件的焦点
    8 A* r3 s0 N. }- G, d0 gPrivate Sub SetFocus(ByVal controlToFocus As Control)
    + H+ n1 K. r4 {! Y( v' ~+ iDim scriptFunction As New StringBuilder
    0 H& w$ M1 D; ^. |# @/ HDim scriptClientId As String
    & n% t  t8 R. S1 iscriptClientId = controlToFocus.ClientID1 b% f3 D0 g  h# r% |* I3 [
    scriptFunction.Append("<script language='javascript'>")6 q+ N) h5 `2 W! ]" _1 x( ^; Z
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    & p) B- F$ C8 H" T) Z9 G$ gscriptFunction.Append("</script>"), k4 r! ~# \4 m9 x: ]- P. m3 [5 M
    RegisterStartupScript("focus", scriptFunction.ToString())
    8 h" G+ Y0 m* B1 @1 G7 E8 i1 L  yEnd Sub8 `: ?* r; {- ^, @9 [. [" J
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 8 Z( V% k% d7 x" b8 m0 @
    MyBase.Load# k0 O: E+ g+ ?
    If (Page.IsPostBack = False) Then/ o- v9 |  Z: s3 U3 f3 ?
    SetFocus(TextBox1)
    , |( K! U' _$ |; EEnd If
    9 O$ e9 `) @" n) I. z5 fEnd Sub   X& S% _" C+ I
      5. 滚动DataGrid# B2 l+ K# |1 O
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只5 Z  P7 g1 I6 F5 C) F9 s' i2 A
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    : Z$ a8 n% R2 T" g" y+ Z! y件放在一个DIV中将overflow属性设置成auto
    $ C! C  v$ n, F( [<div style=“height:400px;width:200px;overflow:auto”>/ i# S. m, F7 E/ O/ o
    <asp:datagrid id=“MyGrid” runat=“server”/>
    8 V& L7 k' z) f</div> 8 T( v% X  ?* ~5 C* L+ p! a4 L! G; W
      6. 动态创建控件  }6 J5 D7 q, s/ y
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    7 h6 ^: L" l; j/ ~& iSub Page_Load()
    - Z; n! z0 b9 gDim i as Integer
    ' d0 C8 r' i9 C9 F  a& ~) \2 aFor i=0 to 4 2 h) n5 I! U5 s7 W* I
    Dim myUserControl as Control: K3 t) J+ |# h: t" b' l2 H0 F; w7 v
    myUserControl = Page.LoadControl(“foo.ascx”)
    1 X# Y& w; D; Z3 s6 tPlaceHolder1.Controls.Add(myUserControl)
    . i' V  e( r) v$ I/ t% O3 U/ aPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    ( |% m  v0 ~0 T. C' c3 X( q! w& UNext i
    : w4 n" j3 ~' [% n9 rEnd Sub
    / h, }: f6 f0 U1 k. l7 @7 b  7. 客户端代码的使用$ R2 O/ ]) x" m1 t2 h% _# ?8 K2 j
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标: z7 q0 u% R6 Q6 ~2 k' Q
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性9 |" c4 \4 B% u& M: u2 ?
    asp:ImageButton id=“foo” - M- r9 o" n' x6 Q! [
    ImageUrl=“start.jpg”
    8 A/ A3 S6 e( f9 I- U" q' x- DonMouseOver=“rollover(this);” # j% u7 x% }" S7 S8 }
    onMouseOut=“rollout(this)”
    : o/ I8 J& b+ Q7 _3 n7 \7 Yrolloversrc=“myrollover.jpg”1 Y9 i( ^% b) x' Q
    rolloutsrc=“myrollout.jpg”* b2 A# Y* u$ r6 o! v$ B
    runat=“server”/>( b/ E# ?8 q3 C2 v$ P; `
    <input type=Button onClick=“return clientHandler()” 6 U* A+ L. j  t
    onServerClick=“Button1_Click” … /> * n0 ?; `2 _9 s. r. b
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所  F* t& Z+ O# V
    有的客户端控件。
    , j) l* M- M/ X1 j3 H& QPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    . N( L  Y) G1 L" fMyBase.Load
    $ _; m0 G  [) U: x RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    7 B; ~9 a& V- A* HEnd Sub
    + K' q3 J# G8 R1 R( E% H8 J* V( ~  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-8-3 13:55

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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