设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    5 p7 E. g! \: z$ @7 V求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。0 \) K' _3 n0 p# G) \; q" J
      1. ~ 的用法
    1 K$ w0 s) |7 m& K  x" A5 B  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方9 E. Z- L9 p: H1 p' P" p7 {" s
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不" W! V4 y2 y5 K/ p! u
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。% X- f7 x' ]; @  m
      ~/image/about.bmp & V5 \; j  W4 B
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更) F2 y% z5 H" N% e
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    : |9 ^: R; h2 Z1 w# H" C* c: x+ @它。( S/ R3 }+ T# @/ @; t1 m  t! h
      2. 在刷新和提交页面后,保存你的页面滚动条的位置9 ?/ k& q- |8 o( x5 T1 Y* q" T
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    $ d/ A  p+ o) _8 T用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    2 v. ^# e' |( o( M组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方* U% X( O' N7 ~; j
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,3705 A0 Z6 |! p' |6 M! o" p
    个控件又需要他选择一下?
    - B0 Q/ H! h2 K6 w6 u& _  用下面的方法可以很快地确定和记住你提交前的位置。
    ( D! j' ^# V* |8 O  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    - B# t& t: \8 W/ p+ W不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    # f( z+ A6 n4 K9 m; QPrivate Sub RetainScrollPosition()
    * P( x6 I4 l. H2 U4 jDim saveScrollPosition As New StringBuilder
    1 L! C" _0 f* s; N2 ADim setScrollPosition As New StringBuilder
    ' s  n$ i- ]  H5 }. LRegisterHiddenField("__SCROLLPOS", "0")
    / s" n9 P- y! |, ]saveScrollPosition.Append("<script language='javascript'>")
    ; w' q' _* S; qsaveScrollPosition.Append("function saveScrollPosition() {")( u, T8 Q: Z0 S+ a" l
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")# y% g/ a3 }5 ?/ e, A; Q
    saveScrollPosition.Append("}")
    / I. u( {2 V. @$ osaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    " z$ |, u" D+ ]2 D1 G$ W  K6 o, HsaveScrollPosition.Append("</script>")
    ( u- @# B& Z1 F& e; C5 SRegisterStartupScript("saveScroll", saveScrollPosition.ToString())) M0 R+ f" ^7 i* S. {7 _
    If (Page.IsPostBack = True) Then- B1 W0 p  i5 K! s/ O6 U
    setScrollPosition.Append("<script language='javascript'>")
    / w1 r4 b0 y- E" I9 [  `2 F# hsetScrollPosition.Append("function setScrollPosition() {"): M7 q9 O/ O5 R1 u+ N) U' R: }% f# W6 Y
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    0 }5 u; Z# u6 AsetScrollPosition.Append("}")
    ) Z% n8 q4 c/ vsetScrollPosition.Append("document.body.onload=setScrollPosition;")& J  ^9 ^) V9 Z) L8 O7 K  `; d
    setScrollPosition.Append("</script>")
    , r+ E- @, [( h2 ?RegisterStartupScript("setScroll", setScrollPosition.ToString())+ q: G: h) I; R. o& ^) z
    End If8 T$ J) H% W& N. G- C* K
    End Sub
    7 u6 J9 d7 p1 z$ b) s3 p, dPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 4 ~- w- R7 T* k4 g1 l
    MyBase.Load- P# s0 W$ Q/ J  M2 i( o9 d
    RetainScrollPosition()2 Y' ?# r, b4 |2 E8 }
    End Sub
    $ r+ ]& J5 A6 S0 ?6 N/ y5 u
    . u" U" X; S5 L9 Y0 ?* o3. DataList使用不同风格的模板
      r: h# S+ i5 l$ N/ v. w  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    + S- i, [% V7 H! K/ G# F件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    + f6 L+ {8 ^7 ?) i# b元素或是加一个促销广告图等等。
    1 e8 ~" T0 G0 wDim theme As String( T% l; i0 T; Q% p" ^0 \4 D+ x
    theme = DropDownList1.SelectedValue
    6 q0 @& `, O7 CDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    4 ~; ]" h& o( n5 w& S% D: H% @& E5 _DataList1.DataSource = DS
    & F* J3 ]" w  ?7 V" T' _( }8 F4 ]DataList1.DataBind()
    " L8 x1 \) @6 N. k3 P3 W3 t( j- G      4. 设置服务器端控件的焦点
    : t0 v7 r3 A/ S  {$ e" P1 VPrivate Sub SetFocus(ByVal controlToFocus As Control)) L4 ?! K) p0 ^& I! l: y: `  ]
    Dim scriptFunction As New StringBuilder
    - N' r" N; e* f0 k8 W' vDim scriptClientId As String
    7 `- o' x8 h0 Y2 D- ^scriptClientId = controlToFocus.ClientID" x, k( X3 U& B) Q, n
    scriptFunction.Append("<script language='javascript'>"). p6 D0 E" Q/ m  ]& V
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")5 r; F- a; U2 H0 l$ q7 ?
    scriptFunction.Append("</script>")
    4 J) |( \. W# B  ^( q6 C0 sRegisterStartupScript("focus", scriptFunction.ToString())
    ; L6 C0 ~9 [) Z  C6 ]9 ^End Sub  L3 D* ?( u3 G
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ) I+ Y. b; u% g5 q
    MyBase.Load
    4 R0 }. r+ O; Y. R6 @# n! }If (Page.IsPostBack = False) Then
    ) Y' H; l6 Z& ^. J& ^: ^- O4 VSetFocus(TextBox1)& B: y/ d7 t8 y$ p3 j
    End If
    % M$ p' i6 d" P4 W0 }& uEnd Sub % i5 j  l/ }4 L3 R" [1 c
      5. 滚动DataGrid
    - g; Z$ a2 H- P% g. e  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只" }. u" Q/ V. t9 K
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    # p/ E, T4 B( k件放在一个DIV中将overflow属性设置成auto2 t+ D$ ~7 \  I. f
    <div style=“height:400px;width:200px;overflow:auto”>; ^1 j. |7 W' w1 l9 s
    <asp:datagrid id=“MyGrid” runat=“server”/>) Z  l% G+ w* O% I! w+ e! p. s
    </div> ' q6 |& h5 L2 a  e. ]/ K" e
      6. 动态创建控件2 H2 f" f  j/ Z* i
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    / N8 o3 }/ J- M  _Sub Page_Load()
    / r5 Q, C: o2 x5 IDim i as Integer
    0 s% r9 @0 W2 ]6 ~9 F( D0 BFor i=0 to 4
    - E( Q- z2 D! q) X$ ^0 W1 q$ HDim myUserControl as Control
    * _6 W* V2 ?% ~7 @8 O5 umyUserControl = Page.LoadControl(“foo.ascx”)
    % D9 l: g2 z8 ]9 W# ^, OPlaceHolder1.Controls.Add(myUserControl)
    / N: K4 S6 I0 qPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    5 _& A" W: N& C' }" N% U( A: UNext i
    & Y2 Q. G, M* l. R/ Y$ vEnd Sub 8 R* }& a% x) }0 v! L$ \
      7. 客户端代码的使用
    . _7 V* i) `7 S% f2 n1 m$ z7 T* W  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标2 W& W8 Y' }2 W' ?/ i7 w" O$ I
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    + K- I8 N0 w9 o) E9 Z( q0 pasp:ImageButton id=“foo”
    ( ?2 f* C# x/ B6 M9 G9 BImageUrl=“start.jpg”
    7 Y  i0 P8 H1 @onMouseOver=“rollover(this);”
    ( a2 c' E: C" S0 B" p& F* x. z  TonMouseOut=“rollout(this)”& E3 |( T; Y: y9 \
    rolloversrc=“myrollover.jpg”; p: q; l$ X- W, x; l
    rolloutsrc=“myrollout.jpg”: A# g) e' ^; f' r! V' I
    runat=“server”/>
    % ~0 m& `) X) o3 ]4 ]<input type=Button onClick=“return clientHandler()”
    ( e- H  {; O4 R2 |9 k4 a" conServerClick=“Button1_Click” … />
    3 i; I5 J. L* H5 M( L. V  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    0 t. p! b- F- ^9 U) N1 A有的客户端控件。+ k, O+ h( U( ~
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    0 a0 |# R2 y9 O# E+ s, p  V7 ^MyBase.Load+ K4 q  C% Y2 n, u: M, [& U
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")7 v3 y5 h7 v6 g: |; V- _' f+ _
    End Sub
    : e3 u- N& F# F2 X& s3 E" N  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-7-1 02:57

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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