设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    5 f9 F2 q9 U, c9 z8 P2 m3 i求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    ) g8 M2 n5 }% F/ Z" s  1. ~ 的用法  ^' q; J; H- C% \4 n1 I( p; H
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方2 L! H8 d4 D% m% _2 t5 E
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    0 n) e0 d0 N2 s. m+ m  [同层次的两个目录的aspx文件分别引用时,问题就会出现了。) O5 V  p# s8 Q& ?& w, l
      ~/image/about.bmp
    $ P! X0 D5 w+ K5 _5 v# J3 z$ f8 H是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更* w* y6 {$ v7 m! V# j: ]3 f
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    ) n8 u/ t" x5 }% O! a+ I1 {4 Z它。7 E* a4 r& o. o* m5 e
      2. 在刷新和提交页面后,保存你的页面滚动条的位置2 [* z) ]( \  c1 A, p' r) [, x6 T
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说( H, F' M9 u6 N
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    : O% _6 T5 J9 Z5 p# j组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    & ]4 Y2 Y$ Z' C( V4 m, l0 p也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370) \* I5 K) T. R$ Q1 g
    个控件又需要他选择一下?
    9 Y7 L# I0 N" U5 d  用下面的方法可以很快地确定和记住你提交前的位置。% _4 E3 T9 i) A7 P  v
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,% ^* d3 X, i4 W- J( m3 ?$ D- A
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件8 k# L' X. m$ F! Z
    Private Sub RetainScrollPosition()
    , i+ w' K- J, a- Z* RDim saveScrollPosition As New StringBuilder& \  x( t8 l3 E! x) P4 h
    Dim setScrollPosition As New StringBuilder
    - V  y# L: G- ~6 G3 TRegisterHiddenField("__SCROLLPOS", "0")  n0 }' \! I: Q$ S$ z" z- {% N
    saveScrollPosition.Append("<script language='javascript'>")7 r( v6 `. H% n% N! K5 f
    saveScrollPosition.Append("function saveScrollPosition() {")) R1 ], o2 `/ `5 p
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")0 f- L8 T% C! t$ v  a# w/ R
    saveScrollPosition.Append("}")& ~1 ?( ?5 \/ }; y$ g$ z! h. h% @% {
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;"). s" ?9 u  d3 M/ \4 Z
    saveScrollPosition.Append("</script>")
    0 e3 z1 ^% M" l' ?# _: Y4 CRegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    . i' j3 G7 ^) i3 [. zIf (Page.IsPostBack = True) Then
    9 ]# b4 t" L3 _& h+ Z1 MsetScrollPosition.Append("<script language='javascript'>")
    * M" _; q' I6 G0 s8 ZsetScrollPosition.Append("function setScrollPosition() {")
    ' @5 o# G0 g  J/ g) ~) |, i' Q& TsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")7 E1 Q/ d- e$ v# q0 Q
    setScrollPosition.Append("}")
    # K/ I/ @6 L& F. u4 dsetScrollPosition.Append("document.body.onload=setScrollPosition;")
    ! O8 D; u2 h8 q* W! }setScrollPosition.Append("</script>")3 W% e" A. o: ~
    RegisterStartupScript("setScroll", setScrollPosition.ToString()). O6 V4 f% z& X; c. Z" F
    End If
    7 F& r  o; k) `" IEnd Sub6 e" C5 h' r0 t8 G. e7 X, G
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    ) ~' U9 {/ o+ `/ G! Z$ k- n& \MyBase.Load, M  J8 g6 ~! Z4 m1 b! r
    RetainScrollPosition()
    + L9 k+ a6 m9 FEnd Sub * r% M& n! a3 h
    . E+ j2 j: ~$ }' i. E4 V  Q
    3. DataList使用不同风格的模板. ~0 \/ W8 q' Q2 d7 e$ x" y% t% w
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    3 D/ W" Y, H" j% w1 W% B7 k6 S件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    7 m1 \. ]# r; l" |, Y4 b+ F元素或是加一个促销广告图等等。. n7 `! r! J$ q& B' M) [& x" A& G
    Dim theme As String$ ]: M2 h. G) Q6 g9 {
    theme = DropDownList1.SelectedValue
    ) K  [0 P/ x- X0 q: N% x5 nDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    " H9 A( ]! A, x/ LDataList1.DataSource = DS
    ) [4 f+ x7 e8 j6 pDataList1.DataBind()
    ) S. k' M$ g/ \. J# i      4. 设置服务器端控件的焦点
    $ H/ i7 u7 }9 sPrivate Sub SetFocus(ByVal controlToFocus As Control)5 l5 O6 O5 q, j% t; t& \6 d/ _
    Dim scriptFunction As New StringBuilder5 ]% ^; R" Q0 x3 n. Y2 d
    Dim scriptClientId As String
    0 o7 c$ [- J! b% f: mscriptClientId = controlToFocus.ClientID* R# x- O% P  e  \" k# g
    scriptFunction.Append("<script language='javascript'>")
    9 T3 t# j* v" M. I  B/ J8 o' J! dscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    + F! a% y0 A1 l7 D2 [scriptFunction.Append("</script>")
    / [) w/ `5 G) ~4 t7 @) c" G5 ]RegisterStartupScript("focus", scriptFunction.ToString())3 a) U0 Z9 R7 c/ v; V1 l: ?
    End Sub% p0 _6 ]( f. E$ c0 \& g% v3 [2 O
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    7 J9 E% Y* L8 C. b$ XMyBase.Load' A8 F) g4 R) t
    If (Page.IsPostBack = False) Then4 U% ?/ e9 S9 j, L
    SetFocus(TextBox1)
    - t7 o$ C1 R% ?0 DEnd If, J- A( V+ Y7 q
    End Sub
    ' u0 y& b4 J( F$ _$ v! }; e  5. 滚动DataGrid
    4 n& w( U8 H) g2 _6 d  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    8 q' i& e, \: B有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    , S4 o3 D; T% X件放在一个DIV中将overflow属性设置成auto* s" L# Q& G; k7 d6 r7 ^
    <div style=“height:400px;width:200px;overflow:auto”>; [' H+ Z7 o9 R
    <asp:datagrid id=“MyGrid” runat=“server”/>
    * F5 w$ y# p) P+ _( y2 }2 s</div> ) G" [* }# w1 d3 H4 G3 |# p8 |) I! N
      6. 动态创建控件
    6 C5 ~* q( J7 L  d4 @' q1 e8 H  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。8 P; `% n  @$ p) a1 i6 W
    Sub Page_Load()5 v, k$ u0 n/ }6 Q9 p
    Dim i as Integer4 B% W" j2 f+ }  r, A  A7 m
    For i=0 to 4 # W' i6 }; r- q/ Q& C
    Dim myUserControl as Control
    1 W8 I- C3 z/ A( K# XmyUserControl = Page.LoadControl(“foo.ascx”)# F! ?- Z, J2 h( d
    PlaceHolder1.Controls.Add(myUserControl)
    6 b$ i: N3 Q' g; m0 A# GPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    ( j0 H7 ^+ c; y5 w' rNext i* P4 p' Y: X0 h2 U7 Q, @2 j
    End Sub * d0 [# {$ R4 O3 E
      7. 客户端代码的使用5 ~2 M; h' I1 d
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    . G  \: W; B! v( t4 Q. `/ R% I" D准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    8 E9 \0 ?' [  d3 I9 m5 s6 Nasp:ImageButton id=“foo” : T+ e/ v& C1 U* w
    ImageUrl=“start.jpg”
    ( l; M1 G* l" M: qonMouseOver=“rollover(this);” * N; T6 Q, u& J7 E
    onMouseOut=“rollout(this)”
    % j4 t, p+ b" L9 ~6 D. \: q! K% ^rolloversrc=“myrollover.jpg”& s) [9 m' a2 \. d- n
    rolloutsrc=“myrollout.jpg”
      p& h( w+ X  y1 I  m4 V8 l5 ~runat=“server”/>
    ) H3 o5 S. H" C2 v6 }, I<input type=Button onClick=“return clientHandler()”
    : ]  }* J8 d( YonServerClick=“Button1_Click” … /> ) b0 ^: R4 k! O+ W  i, A" c3 o' u
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所, J7 m/ p# _) u$ j, U
    有的客户端控件。/ y! ?; O8 m# m' Q1 y  d# y+ x
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles # Y- R1 l' k( i* D
    MyBase.Load; u( u2 T. b' f& X4 |3 {
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    ) j, W5 |( N% M, vEnd Sub
    " p1 d! k1 z! [- S1 X, B- u  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-10-31 08:42

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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