设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    ) I9 M& p/ s) w6 n! f6 S0 q. Y8 |) I求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    ; l  C6 |% @' u( D1 x! ~4 H! d2 G& y% {  1. ~ 的用法1 T4 A8 F  t; e: s- f4 I
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    8 ^; O% q: q( L# b式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    , N# z( F! d6 q& Z$ Q& L同层次的两个目录的aspx文件分别引用时,问题就会出现了。" T% o- O  M; C' i
      ~/image/about.bmp 2 g% R  f8 _+ Z. W- N: Z2 a
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    : @' J- e/ s; T" N# W加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    6 i- @  f- G7 \# Y. b9 ?它。5 l6 C" \( r. |, t6 ]& M
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    0 z( N- m3 Q( |% b  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说! ]( ~7 w! T3 S, r8 @
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸) W6 B+ e3 D4 ^. V) M3 g
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    9 u' w, d, t5 ~" E* C也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    6 s7 n+ W4 B0 n- N+ o! K6 {% ^5 n+ r个控件又需要他选择一下?
    # Y' D9 M0 n! K+ ~' M" E- O  用下面的方法可以很快地确定和记住你提交前的位置。! T4 x3 J4 w0 S  {5 `
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    ( z0 p. W) `7 |不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    $ u9 F4 ]/ Z" Z0 K$ O5 _, XPrivate Sub RetainScrollPosition()
    * J* @6 y0 f0 q+ {7 YDim saveScrollPosition As New StringBuilder; f; N' i- x$ Z$ ^* _
    Dim setScrollPosition As New StringBuilder) m0 [4 h1 R5 N( q; E- L/ K
    RegisterHiddenField("__SCROLLPOS", "0")8 C& C, r* @  p' i! i
    saveScrollPosition.Append("<script language='javascript'>")7 ]' h% S- o0 G( d' N% z' {
    saveScrollPosition.Append("function saveScrollPosition() {")" E5 w- J! r' [* B& M
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")/ b3 q: S0 I3 A2 g
    saveScrollPosition.Append("}"); Q$ S* q1 j3 P- f2 f. A& S
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;"): B1 u) C4 x- Z
    saveScrollPosition.Append("</script>")) S- |- n5 n( A4 j8 N) o
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())6 D% ?1 V' z: M* z
    If (Page.IsPostBack = True) Then0 y& Z6 b9 d* `0 i) A
    setScrollPosition.Append("<script language='javascript'>")5 M" n- B% d; g; ?, a% n" j  `$ u
    setScrollPosition.Append("function setScrollPosition() {")6 M# K) R% j& a# \- W
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    " F3 H# l9 G5 s4 EsetScrollPosition.Append("}")5 S- y: p; P1 b7 e* x  U% \
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    8 |3 B4 r* k# HsetScrollPosition.Append("</script>")3 ?- f" m! Q) W. f7 {& x
    RegisterStartupScript("setScroll", setScrollPosition.ToString())
    ! m2 n: ?/ A- w8 }End If
    ) Y; T- R7 |; s( X. c. hEnd Sub8 T& Z0 K. x: ^. r
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    5 T0 S4 w8 e& k0 c" B: iMyBase.Load+ e$ W. b4 H, S2 t% M: v
    RetainScrollPosition()
    $ {( O, E, b0 TEnd Sub
    8 K1 z' g+ f! Z' p, A. ?# A) M. z4 `) a
    3. DataList使用不同风格的模板& j7 x5 e3 Q- y1 U
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    / S, [0 S1 c2 V3 M件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个5 D+ v% j& N2 H# w. m- @
    元素或是加一个促销广告图等等。; x; k/ R! x* u  E. k4 S, q
    Dim theme As String
    " m& {% F1 t1 M9 Y6 Gtheme = DropDownList1.SelectedValue) a6 T) G5 ]  t! U0 D; c
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    5 o9 y+ M, U: l6 a. U2 aDataList1.DataSource = DS/ ?3 f  _4 ?+ i% k7 S8 O& w6 L
    DataList1.DataBind() & X& B: K1 L( v% Y$ @* k
          4. 设置服务器端控件的焦点
    : R4 A7 c" n3 a9 n7 t" j# {# UPrivate Sub SetFocus(ByVal controlToFocus As Control)
    " }) i0 z6 e* z5 F, t2 v% f' tDim scriptFunction As New StringBuilder- M1 D' O  @' R, }- C
    Dim scriptClientId As String
    ) p- n( D% t9 F, l$ t9 p, h+ n# s" JscriptClientId = controlToFocus.ClientID; I) Q& ]: t1 \3 ~
    scriptFunction.Append("<script language='javascript'>")& }' I& o% _% v0 M" q: H2 ^$ d! B3 ^
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    / f  ?. I% j) O; }: G# OscriptFunction.Append("</script>")
    3 Z) D( t. I3 ?2 Y$ ]& p  `RegisterStartupScript("focus", scriptFunction.ToString())7 O' D' n' `/ K1 L2 H. [8 A9 S4 z
    End Sub3 x% C( d/ `3 z. a+ I
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    ) o/ K* l! k& f2 \" TMyBase.Load
    , R2 @* J) Z! I) U. ~7 B1 RIf (Page.IsPostBack = False) Then2 {. c/ g/ [, e# [5 \/ Y
    SetFocus(TextBox1)
    $ E" ~5 Q9 \# w& d6 A; ~End If6 P5 A5 A* i7 T( z5 ]) o
    End Sub
    ; T; d1 z$ w1 H/ S! |" A; u' l* |  5. 滚动DataGrid' l3 e8 e1 t, F4 U3 Y# J& X3 v, W) X
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只4 G& _( ~4 d7 r
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    & _' n: X9 ]! T, M. i, J2 e件放在一个DIV中将overflow属性设置成auto! l8 C( _% a* N0 B
    <div style=“height:400px;width:200px;overflow:auto”>- q! w6 w" g8 r2 L0 o: o& Z5 c, `0 f
    <asp:datagrid id=“MyGrid” runat=“server”/>, q) f# j/ G* q' |' u- t* z. z. J$ v
    </div> - u' {2 D4 W2 E6 G$ Q. E: X
      6. 动态创建控件( ^+ l* [2 f4 J
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    9 x- L) w$ @6 v8 G! G" P& Z6 A% NSub Page_Load()
    + ?6 J+ [! B2 J& q! tDim i as Integer  e, L( f, [' I0 Y' W$ Z# X
    For i=0 to 4 # f. z, f7 [+ x6 F2 b8 [1 l
    Dim myUserControl as Control
    & p' c$ l% m, \+ W- smyUserControl = Page.LoadControl(“foo.ascx”)
    ) a9 ~% U4 S( j, a& ]$ `* I6 O4 Z( `5 iPlaceHolder1.Controls.Add(myUserControl)- ?9 q# \$ v" ^5 }
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    1 \' @/ _+ Q$ x1 gNext i
    : h/ @6 I+ s- z& d. uEnd Sub / K3 n( U4 ~' d
      7. 客户端代码的使用
    3 l4 v8 t+ ?; c  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    0 d) m/ k. `4 B) B2 d准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    * P$ u4 u/ F% k+ b5 O9 `2 @7 I& Nasp:ImageButton id=“foo”
    7 E4 y& D& a) M& g, r' r7 n5 AImageUrl=“start.jpg”
    % [5 p# K1 O$ @. |" F9 r, OonMouseOver=“rollover(this);”
    # V" Z. k9 |" {onMouseOut=“rollout(this)”
    $ r; ~  X, _. V" o1 _0 E' g# _rolloversrc=“myrollover.jpg”
    9 q  H! ?. h; c' xrolloutsrc=“myrollout.jpg”
    9 l# `/ P0 z* v; m( N5 b% irunat=“server”/>
    $ O8 Q; X9 k6 j& I1 v<input type=Button onClick=“return clientHandler()” 8 k1 \4 V7 G9 R3 L" Y
    onServerClick=“Button1_Click” … /> + i+ ]+ J; G4 C+ a# u. I. M
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所5 Y' E7 ?$ M' Q" }/ q* z
    有的客户端控件。
    2 Q: I0 V3 o% q9 C+ V# p, v+ HPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    $ P/ c+ ^7 y; L; YMyBase.Load
    & n7 R7 X. C2 }9 c$ \; ~ RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")- J, W* P; V' i3 c# H' L
    End Sub
    ; t2 B0 y: l/ k6 d5 E: [& d4 x; Y  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-7-4 03:20

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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