设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    9 Z" n5 b. v7 N& ^求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    + o8 R' Q9 g8 J0 f4 c6 L  1. ~ 的用法2 L! ]2 K- V4 Y7 C4 R5 S. }
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方1 t- O% W' ^+ k
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不9 M0 j5 ]& t/ E: Y
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    0 D! n2 @/ C( d( S4 I7 C0 G4 p  ~/image/about.bmp
    : A6 T0 @8 [: f; s/ |* P" @1 j, i是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    # G' M- H) {6 L6 \6 W加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
      q! x  H' l# J8 d) F5 K* e( l7 X它。
    3 D8 S( D3 i+ R2 a4 R  q  2. 在刷新和提交页面后,保存你的页面滚动条的位置
    & A6 q/ M- P4 s6 S; b  V8 E' N9 r  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说0 l2 ^0 S+ G3 M# t6 U* ~
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    2 ]* E0 p3 B) N9 e& X组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    . @+ T" y# t% h0 D3 k) r也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    3 n' n0 E) y+ J) |4 T2 v- t个控件又需要他选择一下?
    7 x* j; B0 F: u6 W  用下面的方法可以很快地确定和记住你提交前的位置。
    " z$ d8 m  \4 \# v  b* _  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    ) q/ k6 _" s. J# t6 g% ~4 L) }/ z不过他使用了Web Behavior这意味着你需要使用一个.htc文件+ Z# ^8 @1 Z( y/ x* g' c
    Private Sub RetainScrollPosition()8 s. j' j( l' z! H' H, g
    Dim saveScrollPosition As New StringBuilder
    7 {0 k+ b4 T% N3 j) d  P3 ?Dim setScrollPosition As New StringBuilder
    0 u( c/ @0 k( S1 U% e# {RegisterHiddenField("__SCROLLPOS", "0")9 l! b3 Q& p* w/ b
    saveScrollPosition.Append("<script language='javascript'>")7 U& y& p2 `4 w$ s
    saveScrollPosition.Append("function saveScrollPosition() {")
    7 c" g: Y1 ?$ b  D1 }+ v1 E! nsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")( F8 `$ n  f) x7 W' N
    saveScrollPosition.Append("}")
    ) H; u9 e0 g; l7 RsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")9 c( f, _6 G* W0 t; t4 L
    saveScrollPosition.Append("</script>")1 E6 e; V0 E; j0 l; j8 _
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())2 P5 t$ c8 e. n& R
    If (Page.IsPostBack = True) Then( b& ?6 m& s% d/ i
    setScrollPosition.Append("<script language='javascript'>")
    " J. u) P( Q! ^* t- NsetScrollPosition.Append("function setScrollPosition() {")
    7 s! l/ D9 C+ d2 I% y6 lsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    # w; F' R' k. U& jsetScrollPosition.Append("}")/ h0 q/ {. m) v, s( I  F
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    " [2 @8 E/ s  {/ ysetScrollPosition.Append("</script>")
    8 V. A: [3 b/ hRegisterStartupScript("setScroll", setScrollPosition.ToString())
    % d0 o( P& _' y* Y( g6 P, iEnd If) s5 ?- L( d9 d% m
    End Sub
    # q% u# d& U9 s5 F9 [- m! |Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles : |, T+ T  j% r* _! t2 B# \# d& G
    MyBase.Load
    : S6 ]% a7 p7 c" {- L) G6 c2 M% qRetainScrollPosition()' n5 O! u- _0 S) c
    End Sub
    4 S* t0 [, P& G/ J. Q0 `, d8 f& j1 s: y- o
    3. DataList使用不同风格的模板+ J# g- g: _. j* q* z7 P! J
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    + X/ h# D- r; _+ z) c* d2 a+ _件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    # ]9 G$ T: f* S" r* \! {8 H- ~$ g元素或是加一个促销广告图等等。. s  K4 z3 H4 @* }9 f  @
    Dim theme As String# |0 \0 l0 j2 W- e% a
    theme = DropDownList1.SelectedValue
    & ^) d- A& ?/ uDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool) L, [2 d! A6 E
    DataList1.DataSource = DS0 }/ }. l, ]1 ^
    DataList1.DataBind() 0 q  F  D$ k: d7 n
          4. 设置服务器端控件的焦点
    , v. Z/ K/ d0 Z7 GPrivate Sub SetFocus(ByVal controlToFocus As Control)6 k' M) `& j* L4 q) Q) J
    Dim scriptFunction As New StringBuilder- c5 r9 `( j$ B& y& ^/ a; }, o) ~
    Dim scriptClientId As String
    4 ]! F! d! H5 p$ M7 A& h* EscriptClientId = controlToFocus.ClientID
    ( O( S# _4 U, `  h+ r, D$ {; c& [scriptFunction.Append("<script language='javascript'>")
    9 V" X' K5 ~% a3 t/ YscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();"): B. I3 G2 s# K* i1 C
    scriptFunction.Append("</script>"): i! T: D' ?5 V7 R  U1 E: `* h
    RegisterStartupScript("focus", scriptFunction.ToString())  @; T% ]& v; y( \
    End Sub& x/ Z1 c: F: u: Y6 o4 E; X6 E% t% F5 ~
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ; _, F9 ^0 y3 u$ ?9 j  O
    MyBase.Load
    ) O( b- i1 m$ u# u$ s& F* p2 a; K9 bIf (Page.IsPostBack = False) Then: p& o! ]/ x* v3 _( G7 v
    SetFocus(TextBox1)& V5 f* ]* K4 c( o% b
    End If0 W0 I6 M; ]& b0 B5 w
    End Sub
    $ G0 L- h  G" K  5. 滚动DataGrid
    ! n* l4 e# f5 l% W# D! G4 a) d( j4 M  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    2 I: S0 {- V/ o( T5 C  `有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    , U0 F0 L# q, c% }件放在一个DIV中将overflow属性设置成auto
    * V% T2 x& b& k/ X+ l<div style=“height:400px;width:200px;overflow:auto”>
    4 t/ q; k% o1 _4 Q<asp:datagrid id=“MyGrid” runat=“server”/>- a! _" p' D6 ?. U! Q: t+ o6 t' L
    </div> 3 o& A2 }7 m* m2 _3 Z9 Q7 X! L
      6. 动态创建控件
    # A+ c! z" g1 C  ~+ O2 B  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。5 k6 V" X- ?; J, n
    Sub Page_Load()3 i: V) p* ?- w& C
    Dim i as Integer
    ( d( {6 E' e, Q( n1 ^* dFor i=0 to 4 ) s% e3 N6 b4 _0 I) L* `! J
    Dim myUserControl as Control
    * s- i' l% W9 ], w. }# q( P7 zmyUserControl = Page.LoadControl(“foo.ascx”)' w. M: `6 O( v; b: [" j
    PlaceHolder1.Controls.Add(myUserControl)+ f5 J. o4 ?6 I4 \+ ]
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    : N2 o/ s+ b7 p( r3 Y/ W* wNext i( O/ W' y/ S2 M- I+ @
    End Sub . q; l, B7 B3 \
      7. 客户端代码的使用
    ( ^- O& u) c) g! H  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标6 q) X  o8 |. k! p0 t+ k) C$ c
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性) g8 l0 Q, n% |* p
    asp:ImageButton id=“foo”
    1 D* b( n) E6 ~- y/ v/ ^ImageUrl=“start.jpg”
    8 p6 c4 b, F  `, K; E# C4 q1 ?onMouseOver=“rollover(this);”
    . }( z  N& ]7 honMouseOut=“rollout(this)”
    / L" t0 X3 ?- j7 ?rolloversrc=“myrollover.jpg”7 I! I0 O  D1 C2 ~, z6 e# n3 I6 `
    rolloutsrc=“myrollout.jpg”0 J  _0 m  Z! j) R) H& [
    runat=“server”/>
    3 u8 C# S3 I( D; a6 M* N$ ^<input type=Button onClick=“return clientHandler()”
    3 J, P8 t! M$ x9 G/ xonServerClick=“Button1_Click” … />
    3 ^& n6 R9 H+ }$ R& p  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所) a% [9 ~/ s- Q
    有的客户端控件。
    ' ~. f' ~9 ~4 I% oPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    ' h% }) n) C1 A" z1 l+ QMyBase.Load
    ! X! ]) L, Q5 d( D) F) A RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    0 i. f; x+ [" e  F* mEnd Sub
    8 u3 a- n1 m) t4 E  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-10-23 05:45

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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