设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    1 G4 H; ?0 g5 i7 T求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    . P0 S* H4 g9 I6 Z2 T  \' y* S  1. ~ 的用法
    0 J2 B% A1 ~0 V  m* _0 R5 ^  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方4 v0 [6 i9 B3 r1 M$ Q+ N" j
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不& e- B, n+ {- ~3 _$ ^. K, [
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。" {+ @) C$ s. M# c2 r
      ~/image/about.bmp & k. c) }: V3 o2 A0 Z) U( j
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    % z0 z- g) `: `2 _  a* \8 E8 d加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览2 m$ Y. i+ |3 U+ L8 C8 c
    它。
    1 d( F# d1 P0 F# {6 ^! b0 q  2. 在刷新和提交页面后,保存你的页面滚动条的位置+ v$ I, X* @- w$ P4 T; G4 i3 Z, @
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说1 H+ I2 Z, `$ s) V9 @
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸& {( S2 S/ d9 u4 b
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    4 A5 d0 a5 z" J" g2 P0 T也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,3708 C) M6 u/ n7 G* C% h5 U# |2 Z5 d3 K
    个控件又需要他选择一下?
    & d! J! i+ t% J4 C4 C1 z& O  用下面的方法可以很快地确定和记住你提交前的位置。$ r$ J/ W0 R7 j- @
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,2 O* q7 ~( S+ L) v! S
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件9 d* N1 R. p) f1 l/ q, `
    Private Sub RetainScrollPosition(), p( R/ O8 h6 {0 W3 |
    Dim saveScrollPosition As New StringBuilder% l4 x+ T2 p$ m  _" w( H: C' n
    Dim setScrollPosition As New StringBuilder+ l3 b3 m. x3 B# E) ?
    RegisterHiddenField("__SCROLLPOS", "0")4 w9 c4 A, H+ b+ e
    saveScrollPosition.Append("<script language='javascript'>")6 s  Z" E1 w% c% [5 d( w
    saveScrollPosition.Append("function saveScrollPosition() {")
    1 c5 I5 d% B: ^1 g$ P' tsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")' Y8 i7 L3 f4 S  F* B/ C" M. ]
    saveScrollPosition.Append("}")% k3 v6 c& l9 N' d$ b! {8 k0 _
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")8 ?0 _7 _: r) i; }7 {" f. n6 r% ?
    saveScrollPosition.Append("</script>")6 ^0 j- |  S, T; e
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    - t. ]9 A: E# e( ~If (Page.IsPostBack = True) Then) H: j/ l+ ~0 k# R8 H  z: s' S+ w" r& @6 i
    setScrollPosition.Append("<script language='javascript'>"); _" [, d3 x2 u& D: f2 r& P
    setScrollPosition.Append("function setScrollPosition() {")
    : R+ d3 }8 V: _- i- s# D  ~setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")3 O9 k) [. g2 M% i% V
    setScrollPosition.Append("}")+ p/ G  J7 H  x
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    ( g3 ^& G8 \* H4 q  q/ T% p9 W; s) UsetScrollPosition.Append("</script>"), E. i0 X1 K! \# t( G  g% r9 ?
    RegisterStartupScript("setScroll", setScrollPosition.ToString())* l% @5 n: I  `+ b( E; W9 F
    End If
    ' H! Q& o) j& }- ]2 B, lEnd Sub
    ' l& L% z0 u7 w5 w' MPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    4 p4 `3 i2 r! _% N2 Q% WMyBase.Load
    / U7 b- K2 y! ]* |) H! Q4 kRetainScrollPosition()
    + u7 J; y0 J/ Y2 V5 LEnd Sub , m6 l# M  ~; i: c: o3 \

    1 g% P7 L3 _7 N  ?; Y# _1 @3. DataList使用不同风格的模板
    ( M& ~4 Z, y' ?: o$ ]. A% X  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    ! |4 i6 d3 C! D$ u2 H, Z件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    5 ?. s# K5 ^# z, I* p元素或是加一个促销广告图等等。
    1 R! L5 ~4 i. W& S+ t2 a# bDim theme As String
    ( G1 B! r5 v6 F2 [( @theme = DropDownList1.SelectedValue
      M8 v" d; E/ m6 \- t" @DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool- Y9 t# q7 X! S4 }
    DataList1.DataSource = DS
    ( Z% p$ {0 C/ N, F4 c( k* a, {- ~DataList1.DataBind() 9 \  h/ {( |% i& I  Y! Q3 D
          4. 设置服务器端控件的焦点8 C1 Q. z4 R/ ^& Y, ^% p' F
    Private Sub SetFocus(ByVal controlToFocus As Control)
    . U; n4 F# y& f. u: [% Q7 MDim scriptFunction As New StringBuilder
    ' w" Y% ~0 _2 m% @. m$ ?, i4 HDim scriptClientId As String
    % N! Z$ W; N- jscriptClientId = controlToFocus.ClientID
    . S( Y: h3 b1 \/ y* jscriptFunction.Append("<script language='javascript'>")9 b* n* i1 a3 d/ i3 |8 T" ?9 @" ~
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    + _" r- g! V1 k1 Q8 K9 f1 t3 c- WscriptFunction.Append("</script>")
    : x) |+ Q0 c2 D) s7 F& f6 rRegisterStartupScript("focus", scriptFunction.ToString())% y! d# }0 j: v% Y' i  d
    End Sub
    0 b% Y- [. [$ \! D3 N! P- {Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 8 m& E) P! T8 w2 G# ]
    MyBase.Load) i- n7 J6 Y' R- O- m/ @
    If (Page.IsPostBack = False) Then* q5 ]% K/ c( G3 ~) y" N: l
    SetFocus(TextBox1)
    $ j% H# y- H! X6 OEnd If6 k# F* G  ^8 }" V* k$ Y! F$ M6 g8 f
    End Sub
    ' e6 v% S+ M* _- V  5. 滚动DataGrid' |* g' C3 k9 p2 S6 y& ~
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只- E3 M% Y2 M) X8 V
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控: S' k$ C8 ?! k1 Z
    件放在一个DIV中将overflow属性设置成auto
    - N, a# M8 S5 Z! c# P3 K  q+ q( h<div style=“height:400px;width:200px;overflow:auto”>/ {7 {7 ^* m% M! n
    <asp:datagrid id=“MyGrid” runat=“server”/>+ ?. J; p: a. x/ B& m7 }
    </div> / A; B; w! o0 s6 P
      6. 动态创建控件1 Y, A6 @( N; K; u  x
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。; e+ o+ J: {& G+ k. z
    Sub Page_Load()+ U6 H! A$ i$ b$ k
    Dim i as Integer! ^/ |- f, b+ v5 F+ J
    For i=0 to 4
    9 t: V2 \( s6 J3 zDim myUserControl as Control
    1 P: K6 m. w2 `% Y  tmyUserControl = Page.LoadControl(“foo.ascx”)3 }" q# r9 b4 c! ^
    PlaceHolder1.Controls.Add(myUserControl)
    - i- }! v; }1 a" QPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))5 p8 s: z" _) Z  K$ U
    Next i( E  R' L3 t0 q4 y
    End Sub
      \  S/ V9 L" x) S8 k" E  7. 客户端代码的使用5 z* }5 X$ G; @- S+ ?( b4 a9 l
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    . x$ z$ G/ I8 N/ m准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    9 t- k0 a4 r; Y# P5 j/ Basp:ImageButton id=“foo” # b7 S9 U9 O/ Y( v  D1 Q/ m
    ImageUrl=“start.jpg”
    : E6 u$ |8 k7 ^) A2 f# Y! Y( p0 YonMouseOver=“rollover(this);”
    8 h, b( E( K1 z) p4 N) WonMouseOut=“rollout(this)”  R7 V- F! e/ r0 n4 ~( [
    rolloversrc=“myrollover.jpg”
    " T/ Y  }- w4 N# }" [& Lrolloutsrc=“myrollout.jpg”; F1 M" l  z9 K$ ?; }, o! i3 y9 R2 w  B
    runat=“server”/>. M( O0 m4 j/ l& T9 N3 G
    <input type=Button onClick=“return clientHandler()”
    & I* i" U$ f- }3 VonServerClick=“Button1_Click” … /> 0 J5 d4 U- V4 F. T
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所4 ?# `; Z. ^% s8 F6 S
    有的客户端控件。
    ) @$ K) e: ?1 @& Z6 P1 MPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    # A) `: b: n' }# J$ }/ x: q# pMyBase.Load
    3 @/ B! p4 i( @- l% O RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")% h7 d; W+ h. W: g) ~
    End Sub
    , i0 T$ ]- N/ i- O! Q& p2 Y5 }  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-8-3 02:12

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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