设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需5 t/ C+ r" x( Z0 ]
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。" t6 v0 O. x8 o% ?2 Y
      1. ~ 的用法" T+ v& h: W$ r; \% {, Y! p' d6 Q
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方" ^$ E8 y3 K6 L4 w# n1 R4 N) K" L
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不2 x/ K: V- T/ _) s4 J4 R
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。5 S/ {2 }) Y. ^4 L- }
      ~/image/about.bmp - Y9 d4 J) u0 Y' u" m$ v$ [7 i
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更' Y" A' }- r$ t( s+ D. \
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览4 \/ n9 i+ O  {
    它。
    6 k/ v4 K& m6 B2 z# k  2. 在刷新和提交页面后,保存你的页面滚动条的位置; U& s8 x4 ^: u7 b
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    / f3 O! C6 ~) v3 r用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸& ^) y/ m, k" B: Y
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    % Y2 h0 F& a; B  `# `: |  P5 R! K也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    % b, ^4 b% _6 ^个控件又需要他选择一下? ) N+ S: `- T2 M# p2 Q: f
      用下面的方法可以很快地确定和记住你提交前的位置。
    ( {+ V# V+ y% L% E  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    ! f3 X% Z: L6 B" l! o7 S2 E不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    7 d/ P, N4 |  P8 ]( OPrivate Sub RetainScrollPosition()
    9 J# L9 {9 a5 X. n7 Q/ ODim saveScrollPosition As New StringBuilder
    1 {9 A$ @# ~' a# Y5 oDim setScrollPosition As New StringBuilder
    # h6 u& g4 W2 P' e/ `7 gRegisterHiddenField("__SCROLLPOS", "0")
    2 `6 ]7 L, ]/ Z  b% z' D% fsaveScrollPosition.Append("<script language='javascript'>")0 M/ `" E8 U. _" {' g, i6 H
    saveScrollPosition.Append("function saveScrollPosition() {")9 J: v3 s1 G3 C$ F1 G/ D3 K4 v
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    . |" S0 l# ~; w' \' dsaveScrollPosition.Append("}")
    * [% C* x( m* V3 a) EsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")( |( t7 k( v5 Z" r
    saveScrollPosition.Append("</script>")
    % Y9 z+ @" `' [  Q, S# O( mRegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    $ i: u: l" D+ ~1 fIf (Page.IsPostBack = True) Then2 F. c# a0 }4 J- t! e) R
    setScrollPosition.Append("<script language='javascript'>")
    6 X' o6 u0 e( z) ?; usetScrollPosition.Append("function setScrollPosition() {")
    * }3 m" y0 ^: C, J' q6 Q: U  n. t) xsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")! {# G6 K! W8 @- z. j
    setScrollPosition.Append("}")
    4 g" n3 Q2 ^; E9 E9 f  o& ysetScrollPosition.Append("document.body.onload=setScrollPosition;")
    9 E: h1 }9 U  F% O1 e: `, t" UsetScrollPosition.Append("</script>")# \6 n) ?  W( D1 L" d4 L8 w+ [8 h
    RegisterStartupScript("setScroll", setScrollPosition.ToString())
    ! F7 s# e0 N& ]5 D8 d) w) uEnd If
    ! A( m/ F. m0 F) A* T3 B( qEnd Sub
      @, E9 y( l. VPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    3 t: Z+ f) M/ T0 }MyBase.Load! H. N4 U0 @% m7 P" _
    RetainScrollPosition(): x' s  k& E: \
    End Sub
    ( q3 Q. x1 s0 {) `& [# U1 T) }( [( }7 s* F  ?# ^1 m
    3. DataList使用不同风格的模板# \% y# c- Z/ E2 I, l: A4 q
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条$ L% E' V; z4 j7 Z
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    $ r% }6 k2 D  q9 d元素或是加一个促销广告图等等。! c- }1 m! O( |* l# s: s
    Dim theme As String. Z, n- f3 o3 I! B9 Y" o/ m
    theme = DropDownList1.SelectedValue0 h+ B3 a& C- L( u+ Z
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool0 J' B' }% q1 E$ I2 P+ d
    DataList1.DataSource = DS, `1 Y' E$ p1 n) D8 O. ?  \
    DataList1.DataBind()
    6 x/ L" W9 `% f      4. 设置服务器端控件的焦点
    8 o$ E3 X5 I3 z, \Private Sub SetFocus(ByVal controlToFocus As Control), T, p! Q5 J$ b" ]2 O4 I
    Dim scriptFunction As New StringBuilder% T+ @* J5 P9 p: S9 K
    Dim scriptClientId As String% C) ?4 {6 G/ f1 ~6 Q
    scriptClientId = controlToFocus.ClientID
    ; }, ~- {8 K6 W- W0 C* ^7 HscriptFunction.Append("<script language='javascript'>")
    2 s8 x5 x. L$ X: YscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")3 Y( u& c8 T; I$ k0 i$ }
    scriptFunction.Append("</script>")
    2 W. u( n+ L% O0 f+ |RegisterStartupScript("focus", scriptFunction.ToString())
    9 r* d; v8 y1 |2 P, DEnd Sub
    ; @- i! d8 G; H" OPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles # M- e3 e* b* k/ _
    MyBase.Load8 H0 j0 x4 F4 O% V* W
    If (Page.IsPostBack = False) Then
    3 F( u( z: F4 ?  I$ z1 ~; d- hSetFocus(TextBox1)
    1 T! Q0 b: d  ?End If+ w8 `/ m* A- Y# s8 x8 u( d
    End Sub * B7 e( J8 F( u) H+ r' h( X, }
      5. 滚动DataGrid) G) I, P5 a# M& b
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    $ v% `5 S. @$ |5 M. O有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控) r( x. \) Q$ p# K- O" W* Q  K
    件放在一个DIV中将overflow属性设置成auto
    1 i* w# z5 s* X) R<div style=“height:400px;width:200px;overflow:auto”>) F/ {$ `0 c! ?2 }4 x7 _8 G
    <asp:datagrid id=“MyGrid” runat=“server”/>
    / z, A' ^+ @* D1 c3 k. _5 L- G</div> 4 s# b7 @) i: {! B; r+ U
      6. 动态创建控件& B! x9 W: r0 E( F6 O' ]" d
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    ' @. r5 J* U0 ASub Page_Load()
    ( [) k6 p4 t, Z' _Dim i as Integer
    ( o4 L/ z6 i0 _: H$ V( K' Y  x) bFor i=0 to 4 3 O; X3 b% B+ T5 ^- @0 J
    Dim myUserControl as Control4 I6 J# G( P4 @' f
    myUserControl = Page.LoadControl(“foo.ascx”)
    * ]) M4 V" w4 a8 s" EPlaceHolder1.Controls.Add(myUserControl)
    % s( @& H. E8 Q1 VPlaceHolder1.Controls.Add(New LiteralControl(“<br>”)): E4 p7 T- }/ [' F% [
    Next i, m* x0 S7 c4 j6 S" Z) f& ~
    End Sub ( }. l. Z6 R7 X& f
      7. 客户端代码的使用/ }& M2 b3 t- {6 d  J, J
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标7 S( k- K9 x2 L6 q1 a. M0 W
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性2 u" K# P9 V4 d
    asp:ImageButton id=“foo” / s6 u! F# i, d# J$ ?% G
    ImageUrl=“start.jpg”* J4 ^: a6 U+ e& }% M5 a# @- ]" K! {
    onMouseOver=“rollover(this);” ' j' b' a/ y5 d3 m
    onMouseOut=“rollout(this)”
    4 A+ O, |! p7 h/ jrolloversrc=“myrollover.jpg”) X, ?, h/ M* f7 T
    rolloutsrc=“myrollout.jpg”
    8 w2 F0 U; c5 J6 k3 h6 M: A3 k* [% `% drunat=“server”/>
    , L5 m! J3 J7 ^  H2 O! M6 M<input type=Button onClick=“return clientHandler()” 8 F0 k  Q6 k# D( e
    onServerClick=“Button1_Click” … /> 4 F6 E1 R" i" \
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    ; K2 ^  u- `4 F+ h6 |( n有的客户端控件。
    5 D$ B! v3 m! P: `Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    ' ^4 C& |0 C- G9 x: l% SMyBase.Load* j0 x# ~) f7 E) K1 u8 i) a, r
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")* `1 K& a& Z. @3 b
    End Sub
    ) l$ e, l, e$ Z9 i' E  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-11-23 22:37

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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