设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需7 Z" n% ~6 r3 i, A0 c+ H
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    $ K7 J& m* V, @- k) o# Y/ @' e3 w  1. ~ 的用法
    $ o, l6 K7 M6 a$ ^  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    $ D, x4 h* u( i1 L% J9 w5 _式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不1 L/ t, I! ~/ [3 o6 N) C  q4 g
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    4 R; c4 K4 [% ^/ I  ~/image/about.bmp + [3 U$ m9 N8 N- x/ r8 Z: `
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更( |9 a5 \$ l& T: n0 m
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    & c2 Q& _! X8 r1 Y$ B它。
    : H5 D+ I2 s; g0 k( ]  2. 在刷新和提交页面后,保存你的页面滚动条的位置
    1 @( L2 S% Z; d3 _  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    # h6 @9 F% V; b3 G" Z# G: d用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    5 d7 ~& h7 z; W组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    + T) g9 h4 s3 I也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370& e% B$ ]' J0 a% a: J. f6 m
    个控件又需要他选择一下? * L, L$ J8 w. H  G$ S; T7 H% t* t
      用下面的方法可以很快地确定和记住你提交前的位置。
    # L) A! T, I5 f4 R+ S; E+ R8 @  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,2 s: Y9 P$ _6 @. p& h0 W0 N
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件: ]- ~* E: h, O! c& h* t* P
    Private Sub RetainScrollPosition()
    0 H( c; N/ k& u5 c$ ADim saveScrollPosition As New StringBuilder
    1 M, d3 X- j* M3 pDim setScrollPosition As New StringBuilder5 N  Q: K- z) |% _; D8 x2 [: J
    RegisterHiddenField("__SCROLLPOS", "0")
    . S" b" F4 [/ c3 HsaveScrollPosition.Append("<script language='javascript'>")
    ; a' R! _# b/ rsaveScrollPosition.Append("function saveScrollPosition() {")6 {) G5 L& v, H4 Z% G
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    1 Z" m/ W* J7 `saveScrollPosition.Append("}")
    0 s) W. B4 d8 z1 D/ d5 b* p# v+ ksaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    " M- Z+ _" k# L6 _( c( q* osaveScrollPosition.Append("</script>")
    ) Q4 G5 N# F" y. J. Y/ x  X8 aRegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    : O) i" I# O: \" M6 h3 M: jIf (Page.IsPostBack = True) Then
    9 W" b: O( k& @6 l4 [7 AsetScrollPosition.Append("<script language='javascript'>")
    ! t( S/ _: P2 d4 x% JsetScrollPosition.Append("function setScrollPosition() {")
    & Z& `, s' K! U. Z% F! gsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";"): f& e3 Z. ~! v' ?, K
    setScrollPosition.Append("}")
      P& @9 w* c3 l) GsetScrollPosition.Append("document.body.onload=setScrollPosition;")
    ) o" c  @0 y% fsetScrollPosition.Append("</script>")
    3 X6 c" t' ?1 c' H/ rRegisterStartupScript("setScroll", setScrollPosition.ToString())
    ' e7 u3 O0 x" L) e+ [End If
    8 O$ c; v( p- b7 Y- }9 CEnd Sub
    ' C0 J% Z7 F% QPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    1 o$ g4 T0 K. C" t3 [, {- ^MyBase.Load0 a) T6 w: [, V7 K! o2 s9 w: I
    RetainScrollPosition()
    3 {5 ^( E, s$ _) }End Sub $ J6 A8 j0 l/ t6 W
    - V, `$ X' Y, D, {  z5 r+ ~
    3. DataList使用不同风格的模板
    " |7 D! x, G- a' R5 ~* w0 ]5 e  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    5 n: x6 z. k6 Q' W6 i% [件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    % x6 f( S: X+ `, Q1 j$ g4 X元素或是加一个促销广告图等等。
    # X4 l+ i% b4 p5 d* G7 y+ M; ]7 C; QDim theme As String" X/ S/ o, u- E$ K
    theme = DropDownList1.SelectedValue
    8 X$ v- y: }7 L7 h4 ~; sDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    : r4 L5 I+ S$ u; B+ U$ f% \( \5 ODataList1.DataSource = DS0 Y9 c/ z3 l: `$ s" O
    DataList1.DataBind() * D" _( z6 h# l& ^7 j) r
          4. 设置服务器端控件的焦点3 r1 n( T' l) F: H7 v
    Private Sub SetFocus(ByVal controlToFocus As Control)
    6 m* J& s7 q' v5 Q1 d: vDim scriptFunction As New StringBuilder
    : c7 F/ G' ~* m2 n* C8 |Dim scriptClientId As String9 \$ ?# v$ Z" P# X
    scriptClientId = controlToFocus.ClientID: C! W" e/ L  R3 W1 K
    scriptFunction.Append("<script language='javascript'>")% D7 ?2 z: W6 {4 f, n5 M; ]
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();"). D1 E* p4 W& I# B
    scriptFunction.Append("</script>")
    6 L$ d" T' M# y  G) ARegisterStartupScript("focus", scriptFunction.ToString())9 v. `3 d3 A* v
    End Sub" K) v2 i' W+ W8 z$ k. R* l
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    $ C1 w# P, C% xMyBase.Load
    % g, x* ]( y! _  z9 O- m3 E% Q4 vIf (Page.IsPostBack = False) Then
    4 j/ t$ W0 T9 P; CSetFocus(TextBox1)
    . G, r; _2 k5 p1 o" eEnd If9 s- M3 I0 I9 G6 _: G- W
    End Sub
    0 ]6 p7 [2 h7 x9 m7 E. b  o  5. 滚动DataGrid
    " j$ W8 a3 q+ ]0 F- i0 K  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只2 R0 {1 `) |( @9 Z" R( N
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控5 m1 c7 _- Z; C4 f( G* t
    件放在一个DIV中将overflow属性设置成auto  j5 \* @  m' x6 p/ F  `- z
    <div style=“height:400px;width:200px;overflow:auto”>
    , A9 S, O* s5 Z3 ^$ p8 _! V3 g<asp:datagrid id=“MyGrid” runat=“server”/>5 E/ s7 g" S( W' x0 z9 Z8 X
    </div> / L! \1 c/ S! x2 N" z
      6. 动态创建控件0 O- |# C- t( K$ ~8 Y, F( A
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    * n- p7 F: W# s! r- ASub Page_Load()
    " K8 }6 [+ |$ f+ J' xDim i as Integer
    " j- |6 g& @/ S" VFor i=0 to 4 + x7 O6 c) l0 l: u4 U8 T0 {
    Dim myUserControl as Control
    ( x4 M3 \! f. R' pmyUserControl = Page.LoadControl(“foo.ascx”)
    $ @, R* ^6 H/ N! T* ~' K+ zPlaceHolder1.Controls.Add(myUserControl), r6 A$ h+ p( [& W* }; ]
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))# o4 o* q; h; }, |
    Next i( w7 `$ f+ H8 P/ B% E6 q' |
    End Sub
    4 [+ `9 m- B' H$ Z8 ], [$ M: k0 ?  7. 客户端代码的使用
    + u* K* F8 s  z$ }- J; U  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    % d! J% X% F) p% t# Y准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性" z( Y+ b* ?; c" X9 a/ }0 Z
    asp:ImageButton id=“foo”
    & J  \. `5 {: d$ n+ i; |8 I& fImageUrl=“start.jpg”
    % T& h" w; i5 Y/ R( O1 ponMouseOver=“rollover(this);” ( ~% t( R  k% N3 G& d
    onMouseOut=“rollout(this)”6 j& e! a, @3 G: h3 Y- x5 A, o" J# f
    rolloversrc=“myrollover.jpg”8 {) T7 Q" B" |5 A- @2 [' O
    rolloutsrc=“myrollout.jpg”  N5 Q9 U6 K! S, v
    runat=“server”/>' F4 r/ Z3 r9 E
    <input type=Button onClick=“return clientHandler()” 8 k- g6 a$ L8 N7 {* i3 S. @# r3 T
    onServerClick=“Button1_Click” … /> / w( ?2 w6 L' W0 x0 W4 }
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    1 _" q* P+ E7 G9 o( n& C. l有的客户端控件。
      ?; z$ Q3 r8 u5 |/ m0 `& zPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles 9 o: s, @# R; [, V2 o
    MyBase.Load4 G9 |& u1 u$ l5 c  y$ a) P9 U' o- L
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")) X5 \6 {( |3 T. m
    End Sub 2 g0 `2 M. O6 N% A( V# L
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-6-26 14:58

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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