设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需9 U$ R% ~0 d6 L! R8 m/ n
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。& ?2 g* l  q. Q4 M( p' K5 r- @. U& |
      1. ~ 的用法: L/ f. I+ u' h7 w) x, c/ A
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    " J! M3 T0 i, a+ V4 M5 o' r式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    ' r3 n# S' k/ V: G3 N% ]同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    ; r( q  W7 y" q3 R8 \/ A+ U  ~/image/about.bmp
    ' q- B! g, |* h% k; y' \! K3 m是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更1 M/ N- |$ L8 J5 l& X8 N1 [/ }* Y  V. @
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    9 g- E- [& w$ _  q* p0 K' R它。
    & ]; B3 ]3 L- i/ F) y4 ~3 u1 N: D  2. 在刷新和提交页面后,保存你的页面滚动条的位置, M9 t( \- c  A4 k
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说- `! X3 |, X/ q2 N( g) D0 x
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    + f- q2 n6 x% d3 G# x# q组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方: J- t/ B- T# a/ |6 ~' b
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370! B" }+ Q# Z, ^. }7 c& O1 m
    个控件又需要他选择一下?
    % \' r8 ?: d: D( S; A  用下面的方法可以很快地确定和记住你提交前的位置。9 l; n7 d8 k+ S4 G( H# l! S6 f. e; @
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,% |4 H! f* E" J# ^" ~1 Y3 |
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    : C6 Z2 e! l- L# D) e& hPrivate Sub RetainScrollPosition()/ G' i) G8 `, l; T! O$ [
    Dim saveScrollPosition As New StringBuilder
    ! Y9 J( B$ y- |! h4 yDim setScrollPosition As New StringBuilder
    . o5 S" t' S6 D7 mRegisterHiddenField("__SCROLLPOS", "0")
    8 e, ]' W+ G& T0 dsaveScrollPosition.Append("<script language='javascript'>")1 A" ?2 S) i0 ~0 H9 w/ ?) B0 G, F5 O
    saveScrollPosition.Append("function saveScrollPosition() {")! n- z. S! Z, g1 y
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")5 X7 c8 k; b# U$ y# Y  K
    saveScrollPosition.Append("}")
    ) F( P! P6 n4 I9 `  Q5 u% qsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    . p( z; O/ K( @/ OsaveScrollPosition.Append("</script>")! j! J) x& H! Q1 B
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())  b" i1 S9 d  d% s: O1 V% ^$ @
    If (Page.IsPostBack = True) Then
    8 Q+ s& L0 F. X8 D* a2 X7 r; ^setScrollPosition.Append("<script language='javascript'>")' d9 F% M# A' \2 ^. }1 D3 H
    setScrollPosition.Append("function setScrollPosition() {")! v* I- T9 i8 b6 W) {
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")5 W3 h, P3 ^/ _, K! e7 L4 T
    setScrollPosition.Append("}")- R# Y$ c' J; [! \
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    * k9 a3 ]8 \; r% k+ o9 \setScrollPosition.Append("</script>")4 q, P/ b( b3 v1 s" \$ B
    RegisterStartupScript("setScroll", setScrollPosition.ToString())5 `+ e- W6 t7 Z* Z
    End If
    * y3 ?1 `5 D5 c. I4 OEnd Sub
    & m3 |+ M: g5 M4 ]- ^. P9 {; JPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles $ D% X. B" [$ K% m/ t. }" x" [
    MyBase.Load
    ) A! a! \; o5 G0 o- s8 G1 x+ hRetainScrollPosition()6 Y7 h# @* m& u. ]  W  G( h- ^# f
    End Sub / ~2 y  n; S% K- L* K
    " {4 U/ w* @& B0 N5 p7 [% t3 O
    3. DataList使用不同风格的模板  f8 n! t7 r* v' v
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条, o6 G, L  L0 X) |$ Y1 R% d
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    3 Z7 m8 a( X( Z: w元素或是加一个促销广告图等等。9 e0 y4 F$ r4 n! X9 a7 H
    Dim theme As String
    * A6 |- y% d# w+ y4 utheme = DropDownList1.SelectedValue0 }2 P+ c& V; A; j' E4 d
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    # q, R- {" P' f/ mDataList1.DataSource = DS
    5 d+ b* g! b. ?6 t( w2 XDataList1.DataBind() 6 ]* q' ~- Z& g% k% x2 i, M0 d
          4. 设置服务器端控件的焦点. N' D; Z$ d- {+ J/ G! p
    Private Sub SetFocus(ByVal controlToFocus As Control)
    ( }- N8 [- h( SDim scriptFunction As New StringBuilder
    : r" n- @9 B, V- z  X8 f- qDim scriptClientId As String9 {. ?# ~! x9 B
    scriptClientId = controlToFocus.ClientID! |6 S  q8 \# ~: M, g! Q
    scriptFunction.Append("<script language='javascript'>")
    ) G( ]! U. N/ U3 H6 E5 G9 L! YscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")% E4 ?+ G. }6 K1 E
    scriptFunction.Append("</script>")
    $ j" B6 r2 z' e+ ?) \RegisterStartupScript("focus", scriptFunction.ToString())
    ' G8 [$ X: ~# U: Z6 K) xEnd Sub# u% v: V! ^, M/ [% }9 y9 n
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    ! l% K! U  Z& ]& Z, [1 V2 uMyBase.Load3 H. Z$ i* q+ F: f# p
    If (Page.IsPostBack = False) Then  t% I+ J# w9 s9 C: R& w% o" X. a& V
    SetFocus(TextBox1)
    7 U2 C' @, u* h4 C; vEnd If
    + `0 t. @' V6 gEnd Sub ; g9 C. {3 u6 t$ [# a
      5. 滚动DataGrid* r1 k( G* f: s
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只) @) P5 D# x0 }; n9 }8 t
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    6 D3 `- I8 k. R' f8 M, ?+ d件放在一个DIV中将overflow属性设置成auto( i; L& w. V. h9 b( o2 L
    <div style=“height:400px;width:200px;overflow:auto”>4 W- s3 O# M- ^; e9 t- L: B( F
    <asp:datagrid id=“MyGrid” runat=“server”/>
    * m$ I& f, r! ^  B! G</div>
    + h7 T* [5 u$ u  6. 动态创建控件( z3 l0 n! t9 T
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。+ `) n5 ]: q6 P9 S8 d+ r4 \; C
    Sub Page_Load()4 `9 Q5 b# Q/ \# y
    Dim i as Integer9 V  n: N% Y4 r* m  S5 k
    For i=0 to 4
    8 U0 b& `9 k5 f+ J: T: qDim myUserControl as Control* g3 f2 |6 R7 x: t5 y& m
    myUserControl = Page.LoadControl(“foo.ascx”)0 ?, T2 \, I! B( p' R7 Y. N
    PlaceHolder1.Controls.Add(myUserControl)
    , v" E/ s7 J1 ^! ]+ b, LPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))2 o7 X2 \5 G0 Y- M
    Next i/ {6 q: w2 I1 L8 X. V: i+ J+ m
    End Sub ) ?9 Y' h) G, K3 h4 ^0 e/ l
      7. 客户端代码的使用# T6 p- l6 n/ s( |" c! y0 y# H3 F
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标" [7 t7 c- q$ l  q
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    ' V$ Q% L+ ?( O1 y& `5 F$ k/ Masp:ImageButton id=“foo”
    - l) c5 Y' W0 w3 i2 U, JImageUrl=“start.jpg”) i  f& K5 l1 [1 T/ \, e
    onMouseOver=“rollover(this);”
    4 q0 c( ^$ y7 ponMouseOut=“rollout(this)”1 K- P7 w8 V; x+ n
    rolloversrc=“myrollover.jpg”4 v1 ]$ C- C  x+ z1 k  T
    rolloutsrc=“myrollout.jpg”
      c, Y. J& K0 prunat=“server”/>
    ! Z- \- S0 z+ h6 \) s+ J: W<input type=Button onClick=“return clientHandler()”
    , L7 b" o( Q( U7 i/ Z2 donServerClick=“Button1_Click” … /> 3 r6 M  ?2 K' M7 {6 n
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    2 v, \) q1 z3 g8 C有的客户端控件。
    3 g# t" D4 N& i, c& q2 Y. zPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles   R! z0 l1 q, p) r8 A
    MyBase.Load
    ; g. L/ N" F; S1 V, @, U; X RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');"); b- {! L6 H& X
    End Sub
    2 p/ _3 ~9 j9 a% `0 T" D  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-6-18 04:55

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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