设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需- V( U, M$ T% w  h& x0 ~& e
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。6 K: P" y% Q+ r% W# W
      1. ~ 的用法$ q# J- J2 \  F2 E2 d& j0 w
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方) ^! ~! [( v6 X2 s: M. K
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不0 G0 z5 r- H. F; u
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。  ]9 `* m+ b' t3 g% N, D
      ~/image/about.bmp
    ! T7 {$ J$ ]4 v9 p1 O1 i* U是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更3 l7 s. O( U. p, R$ ]8 J
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览6 r* d) E( a$ Z! M( w& \
    它。
    / h' U, [' p$ a! |& k  2. 在刷新和提交页面后,保存你的页面滚动条的位置
    : N3 \5 T5 q" g1 T  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说! ?' P1 J8 M* s# x8 V! m9 T
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    4 i4 ^. h9 z# h组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    4 }. B" z) u' i. Q+ M( k也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    8 s# t, K1 V+ l" S: d: G! F个控件又需要他选择一下?
    , V6 B) R$ C3 _9 _( A; C  用下面的方法可以很快地确定和记住你提交前的位置。
    , v5 @6 b6 ?: W* g6 a& q' Q  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
      V. A. Y2 M' X4 A. ~& P& I不过他使用了Web Behavior这意味着你需要使用一个.htc文件) W1 s( {- I4 d7 J/ s
    Private Sub RetainScrollPosition()& j' r1 G& H) X4 L- b& {6 u
    Dim saveScrollPosition As New StringBuilder
    ! _- {9 O' g- Y$ \( j6 `Dim setScrollPosition As New StringBuilder
    6 K5 N3 s$ v2 y) ~6 lRegisterHiddenField("__SCROLLPOS", "0")
    8 l5 t' l- |% ^4 |$ BsaveScrollPosition.Append("<script language='javascript'>")2 {6 u; ^& I$ r7 i" _
    saveScrollPosition.Append("function saveScrollPosition() {")
    : `9 x. z# Z- N0 ?7 usaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    3 h% O' F9 {  z% wsaveScrollPosition.Append("}")
    / O7 v: a% k! \  a0 W% Q# {- ysaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    3 l0 U; Y! m1 `; U9 jsaveScrollPosition.Append("</script>")
    & z; Z$ i# i6 M9 T  \8 sRegisterStartupScript("saveScroll", saveScrollPosition.ToString())+ D; S, i  \% H- n# I" E# ~5 a
    If (Page.IsPostBack = True) Then
    & t" a+ H# [6 z* Y9 tsetScrollPosition.Append("<script language='javascript'>")) A- n3 r7 {/ |" |
    setScrollPosition.Append("function setScrollPosition() {")
    4 s/ f' X7 ^+ y) R6 VsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    1 Z  o. [1 j  M! T& ]setScrollPosition.Append("}")7 `* w0 j0 i+ ?& r1 A/ e; d
    setScrollPosition.Append("document.body.onload=setScrollPosition;")7 d; |: w0 {' d. w' O
    setScrollPosition.Append("</script>")- q6 J# u4 K! a
    RegisterStartupScript("setScroll", setScrollPosition.ToString())( t& O$ G+ H% t9 l; R; U5 q
    End If
    , f8 a$ x# y+ ]- q8 n) V7 _# ~' j  v. pEnd Sub% X- U  R5 M7 ^+ H, d( z
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles + q7 B$ u: |5 H% A' H. V
    MyBase.Load. y" r4 V# N- n
    RetainScrollPosition()
    # d% Q  T) k9 c+ I8 S  WEnd Sub , F5 q9 n9 L8 E* V- t

    3 j3 |. n# J( c! I. k, V3 T# O, r3. DataList使用不同风格的模板
    ' a# |; U8 `, v  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    . d+ O" j$ O* Q- R8 I% N件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    " b7 a4 z5 a! }3 B1 o5 [元素或是加一个促销广告图等等。
    1 ]9 G# m) @* k. P1 d  i* {% CDim theme As String8 i! A6 Z$ Z- B- ]  e' g5 }& e
    theme = DropDownList1.SelectedValue
    4 U: W6 m. L  M: I- T# u0 J, l, }DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool+ r' e  g& N/ Q1 p4 S6 Q
    DataList1.DataSource = DS
    ! g+ Z# a" ?* X! E6 h. |" `DataList1.DataBind() 3 B8 v7 K% F: M: G3 a1 p
          4. 设置服务器端控件的焦点
      ?9 t' D7 W8 U* [! VPrivate Sub SetFocus(ByVal controlToFocus As Control)2 s+ D" [8 l" w
    Dim scriptFunction As New StringBuilder
    8 c" L/ T  B( h4 J; M7 cDim scriptClientId As String
    3 q* j9 d) T% h: D, U; @0 QscriptClientId = controlToFocus.ClientID/ @# z# H+ X% U# u5 V( |
    scriptFunction.Append("<script language='javascript'>"). ^3 t; }4 q+ ?7 L# m3 }
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")* g- q/ E4 p# z2 {6 }  p
    scriptFunction.Append("</script>")3 k7 _( G( |8 S) q' I
    RegisterStartupScript("focus", scriptFunction.ToString())# e- r: h& Z, A/ m. q/ O
    End Sub7 i# T7 s- L' Q/ w8 b6 ^  W% X* \
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    # O# S* A( Z' UMyBase.Load
    2 l2 I! w7 u  v; M/ G' L& SIf (Page.IsPostBack = False) Then
    8 P4 A6 o# c8 l- t5 c' I6 y2 mSetFocus(TextBox1)
    3 S! [( Z. b) nEnd If/ V  {! s) Q& a1 y3 G6 _4 d/ h
    End Sub + n2 U0 A$ B' H. `# Z% j
      5. 滚动DataGrid, U! x* `% w6 }* O5 f1 |& W5 }! U" I
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只' X) H; x- H7 ~! p, S7 I
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    ) O4 }, v$ E+ k7 b4 F2 s* w9 K件放在一个DIV中将overflow属性设置成auto
    6 e# |' S: k- W* [1 Y" T/ a<div style=“height:400px;width:200px;overflow:auto”>
    $ k' a) g/ k5 p7 j, E6 |; H<asp:datagrid id=“MyGrid” runat=“server”/>/ O5 h( H0 v. N' }. T
    </div>
    ( L& |4 Y- `4 @; r6 ~! R  6. 动态创建控件
    + D0 I% v; n! s* K  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。/ R6 r5 X" `! a/ _
    Sub Page_Load(). h) u; ]8 u/ e: E" A
    Dim i as Integer& u  K, g( d2 w0 X# K
    For i=0 to 4 2 c8 ^2 J' Y: s( D+ m2 e
    Dim myUserControl as Control
    $ y/ Z. O# l- ~myUserControl = Page.LoadControl(“foo.ascx”)" Q( U% e3 @8 J- ^3 E# T* |8 N
    PlaceHolder1.Controls.Add(myUserControl)% X/ ]$ G7 c! o7 n' d# g' {, Y
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))1 x! x. f& T" I, K
    Next i3 q; e6 R: Z7 A# O$ O% p
    End Sub
    ! P0 i0 |" h( }- ~. D9 _4 k, |  7. 客户端代码的使用3 `" [( ~! b1 _7 y, G
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    / m5 U! b1 Q' B  k8 P, P  q8 }准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    : _- K7 N) c2 xasp:ImageButton id=“foo”
    : C3 O3 q0 `" m  NImageUrl=“start.jpg”3 |: `! b( {3 K3 R. ~" D+ ~6 ~
    onMouseOver=“rollover(this);” ; n- P; i6 }& n. R$ [& R  T
    onMouseOut=“rollout(this)”
    : a  Z$ c  u1 ~2 xrolloversrc=“myrollover.jpg”; i- O+ u  r2 B$ H
    rolloutsrc=“myrollout.jpg”
    * n! y& ^( q5 V: T4 Erunat=“server”/>( N% W+ s  _: Z- B, [
    <input type=Button onClick=“return clientHandler()” $ u, \" P1 m; P: V7 T7 d2 C
    onServerClick=“Button1_Click” … />
    # b, Z' N/ Y1 u) R9 c  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所* ^- e( C" T# S& e6 ]3 s
    有的客户端控件。# ?2 o: [& A  [7 O
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles # a6 C, d. Q# q$ ]8 Y3 V' V
    MyBase.Load
    3 p7 q1 g% V+ U0 N: u RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")  v7 o8 |# y/ Q3 ^7 t% ]
    End Sub 3 B; Z7 j& q# e3 d& `
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-9-15 23:17

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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