设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需+ B" G1 w  H8 f* o' Y
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。/ y- }/ i( t: C9 G0 i
      1. ~ 的用法; K, d& Z; B1 r, U) n9 r/ D1 G
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方+ w' \% Z* O, m- k# K
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    ; p: @$ H2 K* o, X& k8 B0 J* q同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    3 S8 C) V' B* F; F% f* x$ Z  ~/image/about.bmp
    . C- X" u! n$ y9 p5 G是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    & z& N! v8 ]) @+ g' b加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    . `: r6 X7 P# b  y0 I2 O* G0 O6 I它。
    # `) F/ q1 G5 C- E7 \  V+ T  ^  2. 在刷新和提交页面后,保存你的页面滚动条的位置
    $ ?1 X% E" ?% f" A' ~5 T  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    & P. h$ j5 B4 h# I; \5 i2 d) w2 v用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸4 m% _( W# g! U) i; j# O& M
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方& V* N# z, @) Z2 x( Z" L  m
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    , S- V2 ]$ U; e个控件又需要他选择一下? 0 |) f# J, K% o' `. \. e
      用下面的方法可以很快地确定和记住你提交前的位置。
      N) a/ I- l+ c$ C  {  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    7 o- }0 f( W* y8 [, `: z+ \不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    / m$ \3 O0 H8 V  a% w7 |Private Sub RetainScrollPosition()
    6 y( P2 g  l2 vDim saveScrollPosition As New StringBuilder" G- K# U( i& \# k0 H  }
    Dim setScrollPosition As New StringBuilder: u; L6 ?" P8 D; J( L' l+ ?
    RegisterHiddenField("__SCROLLPOS", "0")
    & W, x1 K* U2 U& b" T2 k; [! |. hsaveScrollPosition.Append("<script language='javascript'>")3 `2 b- A- C) }. g" d
    saveScrollPosition.Append("function saveScrollPosition() {")4 X" P4 u: n4 j8 v2 c
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")3 _0 E. I, T& C
    saveScrollPosition.Append("}")
    " j: V1 [) [6 Q+ Y/ X/ OsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")" V) D6 I$ R' t; a: T. b0 |" v
    saveScrollPosition.Append("</script>")3 c9 X! i. g( Q" t; w6 _, q5 @3 i
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    7 ?/ D& J& `" g& n* JIf (Page.IsPostBack = True) Then
    1 I: d) |! ~9 D! N! RsetScrollPosition.Append("<script language='javascript'>")
    # h  M; r' B& W* osetScrollPosition.Append("function setScrollPosition() {")
    8 T# `/ b, g+ Y$ q( z* IsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    8 a8 ~, {7 m, z) i8 KsetScrollPosition.Append("}"). C" a4 z; K! N/ }" h% n
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    0 b* E" e: ~& t  \setScrollPosition.Append("</script>")
    % u) C4 H4 h. K4 ARegisterStartupScript("setScroll", setScrollPosition.ToString())
    1 V" W# B3 N' W3 i! _4 J& r" X: UEnd If
    & X1 s  G0 z! X% x/ H" r/ Q! V! IEnd Sub4 m* _4 U. [; o( b& x0 n1 i
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 3 t0 Q: _( x* U9 I
    MyBase.Load
    9 i0 E3 E$ u% T1 U$ z1 m8 I! WRetainScrollPosition()
    1 s$ l  O8 H% b9 Q6 G* B9 xEnd Sub 6 Q( ~9 @1 L# g$ b, b4 I

    ' ~) {% s0 k6 c$ E/ U9 @3. DataList使用不同风格的模板
    3 i& ^% |9 s7 o; D* z+ [6 L/ O) k/ ~! q  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条; u/ {& c- l8 [# M0 m# m" o
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    * T) C8 X5 Z6 n5 A元素或是加一个促销广告图等等。
    * n, ^) V  y+ ]' Y! JDim theme As String
    - g4 l$ J8 I8 ]3 Q5 htheme = DropDownList1.SelectedValue
      C8 K5 N# B8 n( ~1 iDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    - u- t5 A, H& Q& CDataList1.DataSource = DS
    0 g9 \7 d" A3 ~; g% f' c% ^7 |DataList1.DataBind() . N. U6 S5 h9 `; U9 M5 K  B  Z
          4. 设置服务器端控件的焦点
    0 a6 K. Y3 V3 M3 Y: U5 I, F( wPrivate Sub SetFocus(ByVal controlToFocus As Control)9 F5 J7 H% v2 U! ^1 P* V: h
    Dim scriptFunction As New StringBuilder7 \. e" N/ u% [& n+ a5 E
    Dim scriptClientId As String0 K% w" C& v4 l2 a3 j4 G. G/ a
    scriptClientId = controlToFocus.ClientID
    * w5 s: e( d9 o: y' m0 S; GscriptFunction.Append("<script language='javascript'>")" m9 S- v1 ^+ \8 X9 `! J
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    " b% p8 j) J2 L1 ^5 `9 pscriptFunction.Append("</script>")
    2 N  F, I7 _0 Z. M( U+ TRegisterStartupScript("focus", scriptFunction.ToString())
    ' w; |, e' {' O' BEnd Sub% z, ~$ H; o7 r: E
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
      i# E8 N4 M6 n3 IMyBase.Load
    3 d' S4 u8 X, U; J  W+ rIf (Page.IsPostBack = False) Then, S1 g+ h  h( A2 ^1 D9 j. [
    SetFocus(TextBox1)
    . U  u7 L3 S) c) Z, U/ ^End If
    * E! i* D* `0 K8 r8 f$ pEnd Sub * w+ ^2 {% r  d* Q' {9 u
      5. 滚动DataGrid& l$ B+ f* [& G$ W
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只9 B8 u$ R' U+ n; Z- L
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控* v: N4 u, n8 }) `
    件放在一个DIV中将overflow属性设置成auto* ]( Q% q  f" M! C- @/ U
    <div style=“height:400px;width:200px;overflow:auto”>
    / T) m/ Y( n, G. V2 E<asp:datagrid id=“MyGrid” runat=“server”/>) }" x9 Y, H* x( h% }& p" E( C* F
    </div>
    " Q; t3 s3 v, o+ w  6. 动态创建控件
    ! N* J4 ]: `4 N4 k+ P  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。3 W1 b' c( u0 `" P4 b
    Sub Page_Load()" V9 |7 c4 H% ^& `4 m7 Y9 i
    Dim i as Integer
    + a$ [5 d+ [4 t! L9 HFor i=0 to 4
    2 I8 S, H/ w. r4 @Dim myUserControl as Control( N6 [1 C8 L; {  L
    myUserControl = Page.LoadControl(“foo.ascx”); b) |+ \' k6 J
    PlaceHolder1.Controls.Add(myUserControl)
    7 x( D- ~* {/ I; @- S  }PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    / U, @/ C& ^  v4 n" F& kNext i2 ~% z6 a+ `8 B+ [# g% B- _
    End Sub
    0 e6 G1 V* o9 E  Y  7. 客户端代码的使用
    & l1 r) k* m9 l- i  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标: @* X3 ~- W! ?# l3 |* M
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性: J/ g% \# P- @* ]6 @5 a& n* u, t
    asp:ImageButton id=“foo”
    $ S( \' E9 `  o9 fImageUrl=“start.jpg”% T$ `3 i. l9 c; N- B& a) V
    onMouseOver=“rollover(this);”
    1 N- o: H- R, l; N- sonMouseOut=“rollout(this)”
    8 F. g# A1 m: k6 c+ \+ d/ drolloversrc=“myrollover.jpg”9 z# g* X" l* d1 O
    rolloutsrc=“myrollout.jpg”4 r& P' a, D& ^, ?* K" P' {. _
    runat=“server”/>
    / S, d$ U: Y3 M0 ?; e4 t<input type=Button onClick=“return clientHandler()” / @$ J: k0 _0 y/ a% r
    onServerClick=“Button1_Click” … /> : t: H9 B8 W- y* F) g. g5 D' g5 q' k
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所% F( }; [: o3 y6 G1 M, F& j
    有的客户端控件。4 v. J" u3 j! k/ k  _6 G& A% k8 y
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    6 l6 r& M+ v, v+ X- Y2 x6 iMyBase.Load5 J. }5 D) F! Z) M& d8 b
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")" Q0 o% X5 b' r9 O
    End Sub
    2 K% M: M: l/ ]1 y  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-11-23 02:43

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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