设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
      G( E( k$ a- p' f" l- [求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    4 h4 C* _4 i) e' L, C/ i/ ~4 s  1. ~ 的用法2 g) W$ |% M* ?5 Y2 r$ u
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方9 C# f$ J, J# T% F% S- m  N
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    # ~! A' Q: j! }8 p2 {同层次的两个目录的aspx文件分别引用时,问题就会出现了。! |1 y+ i  w! W. G; T& n% T, m
      ~/image/about.bmp , r1 j0 y) M) f6 F  C2 z5 l% z* e$ x
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更+ N" W7 m4 g: X" D
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    5 [+ e6 P! R" E它。) o& M! M2 D8 }1 {# O
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    " s! z% L* p9 o+ w6 k4 E" x  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说6 k! i2 ^7 a9 C" m: q
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸0 E7 ~0 Z/ a7 J: T
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方# s8 p" }1 D/ s6 Z2 P$ e+ f7 g- r
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,3709 U# H' i  O$ X
    个控件又需要他选择一下?
    , z) K4 [: U7 R. p8 [: ?2 r  用下面的方法可以很快地确定和记住你提交前的位置。  }( ]- ~- q2 k9 L
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,8 ~3 k( @0 v* z6 m
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件9 K) w+ v* Y+ Y, f  V/ A& M) `
    Private Sub RetainScrollPosition(); Q! ^: x( X( |  X1 ]7 U
    Dim saveScrollPosition As New StringBuilder. i6 ~4 s! s7 y# p3 k6 x
    Dim setScrollPosition As New StringBuilder
    , k& _" M0 P0 W* `RegisterHiddenField("__SCROLLPOS", "0")
    / |" E6 q" {- ]5 DsaveScrollPosition.Append("<script language='javascript'>")/ ^; A4 S3 y& b* a; t) H4 H3 {
    saveScrollPosition.Append("function saveScrollPosition() {")* z7 r8 H/ j! S! r& P0 c
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")8 A! e: U) I1 s' w: \, j
    saveScrollPosition.Append("}")
    / u0 m! ]5 q7 G- ?! z3 H* f0 M4 u* lsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    * U6 d& _# [" Z7 F. ?* k4 q. usaveScrollPosition.Append("</script>")$ l& d. K; U+ s: s: L
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())& ?  ~2 @( e' \, @8 Q) E
    If (Page.IsPostBack = True) Then$ {7 s" k8 R0 d  k
    setScrollPosition.Append("<script language='javascript'>")/ b6 B( O# }  G+ J
    setScrollPosition.Append("function setScrollPosition() {")' E- c' d# c# {/ e5 f) o+ I
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")0 T  ^" \2 j- ~7 H$ ?
    setScrollPosition.Append("}")
    $ Y9 U2 p8 c+ nsetScrollPosition.Append("document.body.onload=setScrollPosition;")! Z( s! O, g8 A
    setScrollPosition.Append("</script>")
    7 y; x4 O+ T) tRegisterStartupScript("setScroll", setScrollPosition.ToString()); c& k: F$ r8 W4 P
    End If
    * u0 @. Q+ b" k. V6 VEnd Sub
    . z: v, Y" W! a  fPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles + @+ U) M, e3 t( u5 {
    MyBase.Load
    1 I8 @) h6 e2 Q0 U- ]+ w4 sRetainScrollPosition()# T: @% ?& Q' Y# [0 p5 }$ {
    End Sub ) f7 y* a. N2 o. B$ V2 g
    - n& f  G, Q; Q; q( l- v, l1 R
    3. DataList使用不同风格的模板
      E7 i6 W: S: v  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    % b. l; P( J4 j9 d1 k" t件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    ' s3 q+ X9 I/ F8 O元素或是加一个促销广告图等等。
    ) z# l! H* \6 f+ B: A  Q  b0 fDim theme As String
    5 `2 o2 `. A( |: vtheme = DropDownList1.SelectedValue
    6 X; ^- i1 f6 ]) H. Z2 m+ E5 qDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool% T$ w& O; G  @2 A7 ?- y: O, |
    DataList1.DataSource = DS
    8 \8 t6 o6 q3 e3 I! L' W3 {& BDataList1.DataBind()
    * J6 A) U( t* t& b) V! g3 B, T, h      4. 设置服务器端控件的焦点4 q3 m4 N$ E! @$ A& C% C
    Private Sub SetFocus(ByVal controlToFocus As Control)! e+ L# w1 e5 L. b. W
    Dim scriptFunction As New StringBuilder3 U% m6 f8 S, I, H
    Dim scriptClientId As String( F/ G* Q; @1 t, B: M4 a
    scriptClientId = controlToFocus.ClientID
    0 S3 m# b5 `+ c4 |' ]+ q5 WscriptFunction.Append("<script language='javascript'>")
    % z9 D( r5 u" J: w- P  @; CscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    4 K  {/ T  Z7 ~  TscriptFunction.Append("</script>")
    2 R3 r; d% m  B7 l% H& R" ^RegisterStartupScript("focus", scriptFunction.ToString())
    + d+ k% `/ o. T4 I( b1 K: oEnd Sub4 K6 X+ P% @3 _3 @1 j* H6 B; p" W
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ( {3 m* `9 v9 k: `* t6 T. F$ p
    MyBase.Load
    / a/ S# s9 q1 K! M8 u: F8 g" A$ GIf (Page.IsPostBack = False) Then
    ( d! h( z% l" k: }* NSetFocus(TextBox1)
    8 T# g6 T1 d0 _1 i, LEnd If
    * q4 O( _$ R( Y2 r3 U, a: gEnd Sub . q% x  I, F3 V* o0 k, B7 ~
      5. 滚动DataGrid8 n+ Z$ C" g, ^4 \! k* N
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    - m. h. x1 F5 N: Y0 k' X1 {有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控# b: T# k. B* y- s; a* B
    件放在一个DIV中将overflow属性设置成auto6 C0 t6 w: D- H
    <div style=“height:400px;width:200px;overflow:auto”>; n( J! R( p* K5 B# [: d
    <asp:datagrid id=“MyGrid” runat=“server”/>) x) e1 Z4 C% o: F* S( D7 t
    </div>
    % F( P2 \8 Z* O6 }1 `) u9 T- S  6. 动态创建控件
    $ a* R& Q8 M3 j5 f; y  e: w  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。8 C5 s; g! Y) W' c+ z7 O) _9 {. M
    Sub Page_Load()
    1 `4 h3 A+ N: X. d6 e# tDim i as Integer
    ( `" d& d- O6 Q6 X( Y4 g+ j; c  bFor i=0 to 4
    0 A) T7 o1 [4 q/ W2 u' uDim myUserControl as Control
    : R% d/ y, s3 i; umyUserControl = Page.LoadControl(“foo.ascx”)# @# e9 D0 z! x
    PlaceHolder1.Controls.Add(myUserControl)
    # E' {- |4 @: r# [. ePlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    4 c: c0 Y2 w5 S( [Next i
    ; Y4 s8 w3 g9 V( u; A. sEnd Sub
    7 `4 T7 {6 t1 y" N  7. 客户端代码的使用
    9 u: @6 e. n5 _, H. V1 H! r  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    & }+ R/ b7 x% c, y4 r' H4 [" F$ J- w准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    : t8 t* H2 W8 uasp:ImageButton id=“foo”
    7 k% }4 m, n* GImageUrl=“start.jpg”  U8 X2 b  o5 t% Z. |1 e( q
    onMouseOver=“rollover(this);” 7 Y7 J/ T0 @' a4 ?5 A6 k" M' Y
    onMouseOut=“rollout(this)”* D1 A/ G, h1 `( G% S0 ?4 S
    rolloversrc=“myrollover.jpg”
    ) j" C5 Y) d/ krolloutsrc=“myrollout.jpg”2 w; c, g9 b( B( R# I6 F
    runat=“server”/>
    4 U: E3 g" j1 M* K<input type=Button onClick=“return clientHandler()”
    * u7 y) v5 K; Z2 S2 i' t2 |4 v, MonServerClick=“Button1_Click” … />
    2 O$ V! }( B0 t' R' W5 ^) V1 A  e: |  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    9 X8 {& k$ s6 P# C, r' H1 U: Q有的客户端控件。$ O6 }: N& F# h9 \1 V0 s
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles 0 B+ r6 S' \  S0 z' w
    MyBase.Load' _! s9 ?7 U# ?  g; Q
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    1 Q3 U9 [9 A6 u2 N$ R- dEnd Sub * @+ q0 }1 h" K# ~  E7 J
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-9-9 10:50

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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