设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    2 f& C  X# l" B2 {2 l求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    + ~* B0 `! ^% M- V) L  1. ~ 的用法
    ' g9 w) [, n: }9 }/ v- p  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方' m5 b: K$ ^; x+ p( T0 g+ o
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不& I1 f- z; v6 g' h* h; w; _. Z0 D- x
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。; D: r' z% Q( h& \
      ~/image/about.bmp $ s- ^2 J0 }6 z
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    8 v3 ]' t8 T& G# B) O加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览0 @! o& c" N8 I7 P2 B) j0 P
    它。8 ~: e/ \) G2 M$ y$ u4 ^6 L3 v
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    5 e/ F. `* [& a" L$ E  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说! ^6 ?9 `; U. _3 O6 p. t, K2 m" E
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸4 H2 W$ G; E7 L  F( f
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方4 s- S& c2 s6 q3 B$ w
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    ( p# L5 w) D1 ~. o' G" G- e个控件又需要他选择一下? 1 Q  |- B* v+ X3 ]* s) Q: X& ?
      用下面的方法可以很快地确定和记住你提交前的位置。
    5 K% z2 P! L5 [: Q4 ^$ a  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    + `8 ]# j! P, I0 D4 |+ w2 J不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    7 {, T- i8 k% R7 q5 JPrivate Sub RetainScrollPosition()8 o$ ?$ H1 W5 p9 `5 |
    Dim saveScrollPosition As New StringBuilder
    9 T2 l- W6 n' G5 b9 tDim setScrollPosition As New StringBuilder/ M3 s# b# z; C: R' T+ M
    RegisterHiddenField("__SCROLLPOS", "0")
    3 V2 c. q* z* @8 `: u; asaveScrollPosition.Append("<script language='javascript'>")1 z5 j- k* S0 e0 h0 k* ?" u) B
    saveScrollPosition.Append("function saveScrollPosition() {"), j7 p! g* K1 \( E
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;"), H6 m8 `, y0 W, n8 n: m% k& Q$ O
    saveScrollPosition.Append("}")) ]. t$ a/ z' W- _2 s
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")5 l1 [( a+ {. H; g! s
    saveScrollPosition.Append("</script>")3 S1 d4 e# c: S8 e/ ?! T
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    4 @; h2 i) N& ^! nIf (Page.IsPostBack = True) Then
    0 t" S- k" N. i7 IsetScrollPosition.Append("<script language='javascript'>")
    7 S8 U% p# `" C$ V! ssetScrollPosition.Append("function setScrollPosition() {")
    ; s& I. b  n6 h1 P3 E; asetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")/ L; [: _- Y7 L4 W' Z# a% ^
    setScrollPosition.Append("}")
    % I6 B6 c7 ^7 i7 Y, p( JsetScrollPosition.Append("document.body.onload=setScrollPosition;")
    7 T) ?0 k7 O# `6 EsetScrollPosition.Append("</script>")
    4 d# }; S4 |) z3 I' v0 S" ~" \' IRegisterStartupScript("setScroll", setScrollPosition.ToString())
    ( c2 ]* n' i* x) LEnd If
    1 E+ h2 K5 X! w$ X! x6 O4 bEnd Sub
    % K. N* U8 u* u$ A/ ?) _, n- }! IPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 2 [  `/ C7 c7 X! v
    MyBase.Load
    / g! Y3 ^  J6 [1 m: [* B3 b4 |RetainScrollPosition()9 m0 g5 O1 \" [0 X; {% `  ?
    End Sub
    " \8 o; C: K( Z) F
    6 w  {4 i1 y2 k4 Z3. DataList使用不同风格的模板! _- V/ n  x# J; D) O  E
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条( i  S' Q' u$ v, N2 a+ u
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    . d$ y) C, H( m& }元素或是加一个促销广告图等等。
    ! w+ T4 o0 U* NDim theme As String
    0 `/ R) E: S0 V6 w1 N7 Ftheme = DropDownList1.SelectedValue5 R  H* m) `: \% a
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    ) L/ [1 k* C; q5 p+ Z6 F" y+ EDataList1.DataSource = DS
    ; ~' Y7 |: Q9 I/ Q2 k- Y' Q+ C! x. n$ UDataList1.DataBind()
    # T3 D& j& v0 M% ?      4. 设置服务器端控件的焦点
    2 N% Q- v6 d. I8 N5 z* [8 @$ rPrivate Sub SetFocus(ByVal controlToFocus As Control)$ Q8 K: X+ Z; R/ R. g" ~2 |
    Dim scriptFunction As New StringBuilder
    0 @5 A: K. u9 s" ~2 [Dim scriptClientId As String" w# g- o4 J2 q& O# K8 P( S3 y7 v
    scriptClientId = controlToFocus.ClientID
    5 b. ~5 n8 t1 gscriptFunction.Append("<script language='javascript'>")1 I( K4 q  k/ I% C' @8 |, g+ d6 E; T  ~
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    4 H+ A: ~- Z" K& i& N5 r6 escriptFunction.Append("</script>")1 q( a  N( g2 k" X: c( a3 n4 x
    RegisterStartupScript("focus", scriptFunction.ToString())5 O' F2 \1 [9 `' G* N, M! z5 X
    End Sub
    3 P* x+ v% R% s3 ?- zPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    ' x0 X8 [7 K+ o2 ]/ \% _* D1 {( OMyBase.Load7 y7 \6 A; `/ i/ L2 y
    If (Page.IsPostBack = False) Then
    " S) l! F# E  r  d8 u0 L+ |SetFocus(TextBox1)
    # T% ?, a( D! @# F0 N5 s2 X5 uEnd If+ A/ s' d! B4 ~; _  c6 ~
    End Sub 8 }8 {1 l! E9 U
      5. 滚动DataGrid/ g3 E" D, m' W6 [% Z
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    ! V* a8 L% u% |, a$ w7 d有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    $ ?7 t. A# ?. T: e: H件放在一个DIV中将overflow属性设置成auto
    % [2 V+ H* @8 i' U* A<div style=“height:400px;width:200px;overflow:auto”>3 t+ w" ~; f$ m1 u+ V* B* C' P: z
    <asp:datagrid id=“MyGrid” runat=“server”/>4 c9 p2 T7 T3 h& l! L. l5 [; B
    </div>
    * }; B1 \6 Y$ Q7 e; N* [  6. 动态创建控件6 q  y: W+ y+ J, e" z9 X6 b
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。  h! ?& _- ?1 z4 H5 O' s
    Sub Page_Load()
    ! y5 W* v: `1 t$ `% ZDim i as Integer4 `$ h& n6 [' w! e' f, S& H
    For i=0 to 4 6 D% r5 U" p, A) B$ a4 c
    Dim myUserControl as Control
    ) U0 B& d9 e$ Z/ q: h+ PmyUserControl = Page.LoadControl(“foo.ascx”)
    / j0 Z/ j2 J: |& B7 q- fPlaceHolder1.Controls.Add(myUserControl)) y1 X0 t2 Q* w2 z2 e
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    / h: b0 W3 v3 [6 e+ n9 YNext i! |( S" ]; p; p# F$ k* K
    End Sub 8 H  U& I% V3 O& H+ Z; f
      7. 客户端代码的使用
    . D4 j1 m! m% M) K# j  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    2 J) _! [, S/ R% F% i准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    - a! L* I! f6 aasp:ImageButton id=“foo” 6 M4 \7 M" z7 q) V
    ImageUrl=“start.jpg”
    ) j, ^: u. m2 \" t- y+ q+ jonMouseOver=“rollover(this);”
    0 |) p" M8 l" D  y$ KonMouseOut=“rollout(this)”
    # p0 e3 _+ D- _8 Z' }% i8 z4 ^rolloversrc=“myrollover.jpg”- h) c" ?/ P$ k! h/ ~* N
    rolloutsrc=“myrollout.jpg”
    ( b, s$ A# l9 E' }: J  Xrunat=“server”/>
    4 Y7 S2 X. f6 ^: E* [+ M<input type=Button onClick=“return clientHandler()” 3 ?( [0 H- {6 j& ^/ V: L
    onServerClick=“Button1_Click” … /> / K5 A0 V6 P0 K+ m0 X/ p
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所$ A2 O6 l5 S, F3 ]
    有的客户端控件。( C% S( N; Y8 C& C1 }
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles ( H+ l( s/ ]$ H2 s4 h8 r
    MyBase.Load7 P' w1 I6 k) ]' N( z9 r
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")5 g& L( P, A8 z2 o6 F* R  u* w
    End Sub
    8 u& r: _5 Z* X  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-8-3 13:54

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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