设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需* E7 ?1 \: Q6 P. X( ]4 y% c! h
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    6 b2 E9 Q1 _  h; f  1. ~ 的用法4 V+ ?* M  N3 h5 U/ j, F) ]( T8 Y
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    ' {* g! U. }- |, ^式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不" D7 h# K. N* s
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    * A! E$ Q- E" d! r! o: g  ~/image/about.bmp
    ) K, K6 R) _) r; ?是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    : g' F+ }, v& T加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览4 @! }& a% z0 b4 ]2 }: k8 `, d
    它。
    1 m+ V, J4 f; A: I  2. 在刷新和提交页面后,保存你的页面滚动条的位置; g( K1 W# q, |. r$ ~, D# b2 X
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    ( n+ B6 X* l# ^7 Q, p用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸, B7 b3 J  l. N
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    : Q; ^2 T6 E4 S# L5 E/ i$ N6 w也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370' s% G5 O$ n- |4 ?& X+ |
    个控件又需要他选择一下? # O! r) a7 s, }( v7 }+ z$ f
      用下面的方法可以很快地确定和记住你提交前的位置。; N; s$ e- x, x, u/ J4 e
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,2 Y8 C! l: M. D! O" z" T
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    9 b& a) w) H/ J8 I# h7 [* QPrivate Sub RetainScrollPosition()7 q1 v4 V% ]$ }7 @% E: c
    Dim saveScrollPosition As New StringBuilder& _7 e  }8 V3 i
    Dim setScrollPosition As New StringBuilder
    3 f; l2 I0 f5 N' w! @  J8 ]RegisterHiddenField("__SCROLLPOS", "0")
    $ c. W) S) K9 L9 I5 WsaveScrollPosition.Append("<script language='javascript'>")9 I6 L! G: v$ T$ p( g1 l7 ?
    saveScrollPosition.Append("function saveScrollPosition() {")2 a1 Q3 y6 n0 i
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")1 m4 x# Y. ]+ I& V/ j! n) {$ F
    saveScrollPosition.Append("}")- y' V- F& c& ?7 O" O. q
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    ( X6 x" y4 }1 T% a, U( IsaveScrollPosition.Append("</script>")+ A: J; x1 V: K5 d( S1 P
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString()), R8 r$ e' ~4 S2 I. ^
    If (Page.IsPostBack = True) Then  V$ U2 j0 A8 o- _4 y, M
    setScrollPosition.Append("<script language='javascript'>")8 D4 g9 H3 Z  G/ C2 ~
    setScrollPosition.Append("function setScrollPosition() {")/ M1 @5 R2 P, z0 @6 S( a
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")) O; j/ i/ o4 q" p6 ]: f- o! Y- x
    setScrollPosition.Append("}")
    ( L! i, T$ M. a. ^) X: X2 |) OsetScrollPosition.Append("document.body.onload=setScrollPosition;")1 M  S& J* I( Y0 ?. G
    setScrollPosition.Append("</script>")
    6 j2 Y2 W. i5 u8 cRegisterStartupScript("setScroll", setScrollPosition.ToString())2 f4 @0 r+ n2 }7 o8 ~; L
    End If
    , ?1 a6 c/ B& g4 P+ JEnd Sub
    , Z3 x: I4 M' [8 iPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 1 l+ I8 J4 E% q( \1 p: ^. c
    MyBase.Load/ K% \0 _4 ~+ Z& r) C
    RetainScrollPosition()
    , y0 Z0 v* \2 H' b( u6 \5 ^0 |End Sub
    + O5 d& o5 u/ ?; R6 r2 }5 p5 e3 V5 _
    3. DataList使用不同风格的模板
    0 h% p# [) e  @  w  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    * }6 {$ c! y/ R件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个4 ~- h7 Y. r0 w: n) a# T! g
    元素或是加一个促销广告图等等。
    , k, l! V2 P; N1 x1 T% jDim theme As String' T1 H- Z3 R7 A7 `* H0 _8 N1 e. `
    theme = DropDownList1.SelectedValue
    ) g8 I$ n, r' i! e2 C7 t8 JDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool9 u& H) R4 ~" F* g# I, j
    DataList1.DataSource = DS, i0 m0 l( n+ [# q( R3 v
    DataList1.DataBind() * W! X$ T) c$ h+ I
          4. 设置服务器端控件的焦点
    ; ^# X" W% r0 r! I! B+ CPrivate Sub SetFocus(ByVal controlToFocus As Control)
    ; j# M( @/ @% `9 M- z/ e, r# b9 {9 QDim scriptFunction As New StringBuilder# ~& j0 n: n+ I  b7 l/ s6 h
    Dim scriptClientId As String& d8 S& M9 {( b" E: w
    scriptClientId = controlToFocus.ClientID
    7 b5 e& Z9 A3 h4 g. EscriptFunction.Append("<script language='javascript'>")3 a6 s- Z0 J' |
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")' T( @3 C8 Y1 }+ O% X- c& i) Z
    scriptFunction.Append("</script>")+ k2 s: U# v; g" L
    RegisterStartupScript("focus", scriptFunction.ToString()). o4 D& g& N% @7 N1 W, E
    End Sub
      z! R4 r- v  R6 z8 h. X% n4 [Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    7 D3 G- P& y8 }0 H/ iMyBase.Load
    ( h- R6 w& l- v0 c: WIf (Page.IsPostBack = False) Then  u) e8 U$ a# E* S& F% ]3 A
    SetFocus(TextBox1)
    " |# D' q. q1 W. O) O3 O  [' XEnd If
    - r* a: G: R9 AEnd Sub
    " \. s+ ?' z' q2 a% I  5. 滚动DataGrid
    0 g' E$ v& q; k& b- h: q; z+ e  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    : ^& `  y% Y8 n有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控  `1 }+ G6 r, ^0 j6 f% r
    件放在一个DIV中将overflow属性设置成auto7 @% y8 _, R! d
    <div style=“height:400px;width:200px;overflow:auto”>3 E4 c7 E& @+ X2 N1 F
    <asp:datagrid id=“MyGrid” runat=“server”/>
    4 z+ m1 h+ i9 Z' x5 i1 O# C! i</div>
    # w  s1 o0 R8 u6 B# s  6. 动态创建控件( y- T! p$ G( ]* y/ x$ t
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。7 a2 `" j) [! |6 U' V
    Sub Page_Load()& C. s$ s+ I0 |6 g& Q, P
    Dim i as Integer2 r6 a; W" e! }4 d6 p. w
    For i=0 to 4
    ! T) D) u! s: R1 a# O# d- p+ oDim myUserControl as Control. M2 v2 @; E3 ~
    myUserControl = Page.LoadControl(“foo.ascx”)
      h! p, [" F) L$ Q1 {+ u# kPlaceHolder1.Controls.Add(myUserControl)* g6 Y+ L1 f) F. X
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))( k- M5 H2 t8 [3 v$ m
    Next i# J) K+ X, h- x
    End Sub ; B5 k5 @( ~& n$ g/ d) ^, I
      7. 客户端代码的使用, n8 a' ]% e& m" v
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标9 R7 \8 c; C0 N% t* {3 c
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性1 @$ r* ~# s# a; c8 y
    asp:ImageButton id=“foo”
    & _, l/ I: ~, ]7 g7 CImageUrl=“start.jpg”7 g+ p* g& r4 P2 m& ~" g
    onMouseOver=“rollover(this);” : F3 ]& y* d* x6 f0 f
    onMouseOut=“rollout(this)”  h/ l4 G6 _0 P1 h) g7 m
    rolloversrc=“myrollover.jpg”! H. U0 M: o* q" i. R: G
    rolloutsrc=“myrollout.jpg”
    & v" I, m4 S  G9 D8 \$ e* Srunat=“server”/>
      x* U; a2 V7 u, I* @: e% ~. U: u<input type=Button onClick=“return clientHandler()”
    7 b% {# F/ A' ~; L+ KonServerClick=“Button1_Click” … />
    + ]) c4 D" s! F/ p0 g  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    $ J/ }+ A7 P# x' J: i有的客户端控件。& E6 H# S) z( L9 x  c3 c
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles 6 T- j4 e6 G0 v2 ?% @1 g
    MyBase.Load
    3 x, I/ z4 F2 Y3 H( P8 b. R RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    ( m( d  ^/ _# T! lEnd Sub 6 e9 d; _# S1 z- X( j
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-4-19 02:59

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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