设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    3 S; _& q2 Z: j: Q* L& K求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    . D- y* a4 [) X0 n  1. ~ 的用法
    ; L" I, j7 U9 X$ Y  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方/ b- W4 t' P+ ^" G, I
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不2 B- I2 m. l/ X
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。" G: E/ X9 l! t4 L4 V
      ~/image/about.bmp
    9 o9 I% u' A$ A2 x9 f是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更$ A$ e+ [( U6 u1 K5 a& g  Y# F
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览% F. n6 ]; W3 f# L
    它。+ Z7 b  U# q" T, G4 N
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    - O8 J* x" n$ |! N+ R; V  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    + g. S& t9 Q) L9 U9 Z3 [: H' o- k用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸; ^" N( `9 {* V" I  G' r$ M4 {* C4 m
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方* w; X. ^$ A3 z8 ^
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    6 P0 J8 z% h+ @0 H0 L. I个控件又需要他选择一下?
    , Y7 i- y" A1 P; y  用下面的方法可以很快地确定和记住你提交前的位置。
    ; B/ L8 K; d" A) Y! a  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,. }3 S9 D1 T" ^2 H% S% \  Q( V; g
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件9 g, b" B0 x3 g( J% t, @( `1 C! H# m4 U
    Private Sub RetainScrollPosition()
    1 T7 q/ `4 S- @$ G4 f4 f* E3 ?0 uDim saveScrollPosition As New StringBuilder& a* U+ ?3 ]# `3 a
    Dim setScrollPosition As New StringBuilder
    ) Q6 e. D5 L# K+ z& E  ]/ H5 TRegisterHiddenField("__SCROLLPOS", "0")
    2 B- K* T  q. @; v* u: q; g' T4 msaveScrollPosition.Append("<script language='javascript'>")8 N3 O8 n7 |1 H. e2 x
    saveScrollPosition.Append("function saveScrollPosition() {")9 q1 S7 T1 r# c  C2 w+ a
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    * c9 d. Y4 U9 `$ j% X) P/ k) CsaveScrollPosition.Append("}")
    0 J4 A% x7 [) N3 I' nsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")- j) g# J  i. x( D- D, @
    saveScrollPosition.Append("</script>")
    % S0 w. B* b$ z( A0 K$ H: V# wRegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    - {$ I9 u! v6 O# o3 xIf (Page.IsPostBack = True) Then
    : I1 H1 j! x/ H/ c& isetScrollPosition.Append("<script language='javascript'>")
    . r6 E. d' c3 x0 O* I5 msetScrollPosition.Append("function setScrollPosition() {")# N& E, u1 ^  X5 l" s( h! A0 v
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    $ R% c8 I  `3 O8 r3 LsetScrollPosition.Append("}")
    - I5 s. l9 ?4 w1 csetScrollPosition.Append("document.body.onload=setScrollPosition;")
    , }5 o; ~$ ]* V$ B4 h# r- esetScrollPosition.Append("</script>")) N: |5 O& X& i, ~% ^- ?6 P# R
    RegisterStartupScript("setScroll", setScrollPosition.ToString())% P" d: M7 J: @3 a6 P
    End If3 d3 G$ K8 m/ j$ ^* ?! h* D
    End Sub
    2 a+ Q! y7 A- d* d# ~- A+ pPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles " B$ Q2 ]2 m/ o0 T4 i. w% b+ C6 m
    MyBase.Load' V( p  |4 y, W# f" ?! U
    RetainScrollPosition()+ w" P/ l$ J& E: w9 t
    End Sub
    / m! ~/ d+ x$ J+ W: j* Q
    0 _3 j4 G- j5 l$ y3 u3. DataList使用不同风格的模板7 x4 ^5 F+ `. G9 [
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条) X. }7 ^, p2 B$ e& h8 w; D
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
      D6 B8 h" f" |' e元素或是加一个促销广告图等等。7 U" @) f! k8 I
    Dim theme As String& K, q& {3 G' m, W) k8 w
    theme = DropDownList1.SelectedValue7 m9 K8 S9 E" G7 ?: V
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    + |# V  o/ K" }8 \* HDataList1.DataSource = DS
    * r. N/ T+ ~7 }/ ~DataList1.DataBind() : v) M* G* t, a1 I: X: V
          4. 设置服务器端控件的焦点
    ( H8 w; B2 Y3 F- q/ LPrivate Sub SetFocus(ByVal controlToFocus As Control)* V( ?9 K! w6 K
    Dim scriptFunction As New StringBuilder
    * C7 {) z' r; G# T' XDim scriptClientId As String  E% P' T, X* @2 W/ H1 i2 f! z: ^( }: s
    scriptClientId = controlToFocus.ClientID
    2 Z# n( C7 d4 p& }scriptFunction.Append("<script language='javascript'>"). a' a3 ~: a. T$ A0 t7 U& z+ ]! W
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")6 U" c" }; [. G0 E7 L5 U6 W
    scriptFunction.Append("</script>")  e* G. B6 o3 y7 H  ^
    RegisterStartupScript("focus", scriptFunction.ToString()), o1 d. f+ L% l/ S
    End Sub
    ( Z/ ^4 {9 I- [! RPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 7 a. p0 z6 n  t  l# X
    MyBase.Load
    / d! a7 M( s  W( l8 MIf (Page.IsPostBack = False) Then/ }4 B# u, |" A' U
    SetFocus(TextBox1): S" p( Z8 B, d; z" u% U
    End If6 y  Y7 |+ f2 ], n
    End Sub
    + u0 q# K1 B0 ~% n- `  5. 滚动DataGrid
    2 z9 N5 }- o( X/ \4 F; v' I/ q  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只$ ~% R2 X8 c3 _' k' W* S; A7 W
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控5 K4 D& J4 d0 ?& G4 ^( w* a
    件放在一个DIV中将overflow属性设置成auto
    % W2 T& Z7 B5 ~, J<div style=“height:400px;width:200px;overflow:auto”>6 X7 o# }7 l8 s! O$ x
    <asp:datagrid id=“MyGrid” runat=“server”/>! m0 O8 W3 `7 `
    </div>
    7 p% P' ]& N8 {  6. 动态创建控件
    5 T/ \# h% o) u6 l4 I9 Y  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。1 ]+ _+ g7 y; x+ b) x3 o) a# n2 X
    Sub Page_Load()2 w) h" ~. i& o0 O% r" ?& s8 L
    Dim i as Integer
    & F3 N- s! [/ K) wFor i=0 to 4
    & o) q& g! g0 J; b7 @5 N! `Dim myUserControl as Control
    $ W2 e. v; z) h- ~3 h0 x6 ~2 CmyUserControl = Page.LoadControl(“foo.ascx”)8 x  L: V' `3 A- E2 A' ^; ?1 D" `  E
    PlaceHolder1.Controls.Add(myUserControl)
    # O: d& C9 v# G" ?7 N1 EPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))( U& c  G0 w+ {1 L; {
    Next i
    0 a* ^5 h: S6 OEnd Sub - K7 d6 n6 y! d- v. Z7 p& ~
      7. 客户端代码的使用
    7 [% J/ _7 o3 R, t  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标5 ^" Y! ~4 W( c" O( f
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性4 C. d% L1 ?+ V( Y4 a
    asp:ImageButton id=“foo”
    7 j- l" u# P/ k1 F( P/ E9 qImageUrl=“start.jpg”
    ( ]7 V- G% N1 @4 q/ donMouseOver=“rollover(this);” & s1 `% [/ b9 o2 V6 p
    onMouseOut=“rollout(this)”
    2 W) F1 ~0 n9 i( R9 nrolloversrc=“myrollover.jpg”
    ! s& L! y( K1 T# H8 Lrolloutsrc=“myrollout.jpg”1 z) H9 d4 K$ n1 k. j; _. _6 g4 _
    runat=“server”/>
    / a% w' h. Y+ d, Z<input type=Button onClick=“return clientHandler()” ) {4 I! Q% ?; Q$ F
    onServerClick=“Button1_Click” … /> $ N' h: \1 ~! u: V+ m9 c- G4 ^
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    : [( A! _! z, B有的客户端控件。
    3 h: b) t6 n) E5 M# [0 G1 S' NPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    $ f# T* j' {# VMyBase.Load# U2 u$ l/ T" G+ f9 ?2 @6 S
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")' t( k7 A+ K* s1 X( O! Y' J
    End Sub 2 r0 H. G  C+ o0 A( r' q
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-11-26 10:18

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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