设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    / U5 U0 [$ n9 x! ^* L6 G: c! T3 f求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    , a( A  w0 h6 R  1. ~ 的用法: w; E( d6 C- ]. ]5 A" u8 h
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    1 s9 W, k- d& v! D* l) v: d式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不& v7 G+ h2 ~7 K
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    # Y- H, I4 ]; e, P6 j. c  ~/image/about.bmp ! T3 [' N6 m7 f4 F0 z; g( o  Z
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    + _3 k5 z8 j4 [; J& [$ {加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    + K% E" v$ n! K- h1 b它。% ~2 O: V1 l9 T/ N5 A
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    0 Q# V2 M; M! J  O  u2 Y  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    - r; g* y, a" I* ~6 G: }用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸- k9 e; y$ E/ n' G$ P) ]% [
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
      k1 y, B1 q+ H9 j& a. Z. m也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    ; [; k+ J  v3 V  y5 ?个控件又需要他选择一下?
    8 c: F0 E" ?7 M+ ]  用下面的方法可以很快地确定和记住你提交前的位置。, i" k, a! {  H/ _( t7 V
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,% S: Q" C' E5 e  ]: S0 Y6 g
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    ! r& t/ F3 T3 a6 C7 dPrivate Sub RetainScrollPosition()1 ]; [& X& N3 b  r; k( L  M
    Dim saveScrollPosition As New StringBuilder
    0 s8 \. D& ~) C- [) G0 y' S- D& M5 PDim setScrollPosition As New StringBuilder6 I1 b% L( l* B
    RegisterHiddenField("__SCROLLPOS", "0")
    % b: U4 U) t# u$ w: L1 c, isaveScrollPosition.Append("<script language='javascript'>")
    " e( U: a  v: l7 {8 K" GsaveScrollPosition.Append("function saveScrollPosition() {")+ X  J/ w3 \) v
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    ! Z  }! ~1 J. P& rsaveScrollPosition.Append("}")
    , W9 [* \( x8 B- `1 psaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    0 v1 A6 s% y8 u4 {: z; LsaveScrollPosition.Append("</script>")
    ! f' p! e7 f6 s: D% A5 o! A9 BRegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    ' q. ]4 ?7 C( X) ^8 lIf (Page.IsPostBack = True) Then3 D% |& ]1 A2 ?9 t0 d
    setScrollPosition.Append("<script language='javascript'>")
    1 h1 A+ A6 Y/ jsetScrollPosition.Append("function setScrollPosition() {"): ?: A6 l% E- @( _9 r9 s  J- r
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")* B  Y+ L1 C% @, G1 W" _5 H7 ^9 y5 e
    setScrollPosition.Append("}")
    $ L& E) c1 d* n) A* A+ `8 PsetScrollPosition.Append("document.body.onload=setScrollPosition;")
    - c0 `1 _% p" xsetScrollPosition.Append("</script>")! ]3 ]/ n2 ~" c& h! P6 z  Q
    RegisterStartupScript("setScroll", setScrollPosition.ToString())0 d4 `: W$ m# O6 v2 [: d
    End If
    7 w+ j. ~1 q! \4 M3 EEnd Sub- p* V" a( R7 x" Q  E0 t
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    4 m! m' Q: z7 A3 X: f+ kMyBase.Load
    2 u& c! S$ w5 {RetainScrollPosition()
    ) z  M- X2 N  \! m: p, i9 ~End Sub
    ! a! Q* J% N  p' |) X9 L( w+ g& \9 z* |2 J; j8 l  N
    3. DataList使用不同风格的模板
    , i( C2 I7 B; X  F# [  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条. P( ]: z2 ?2 ?3 O/ z5 T) Q- g
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    ( A/ ^: a' U# n元素或是加一个促销广告图等等。$ h' o$ d4 l9 t6 @
    Dim theme As String4 [) O  G! Q1 H  w
    theme = DropDownList1.SelectedValue1 y. @3 v3 X4 G# |
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    $ v' L2 I- H, d0 D1 ]3 y# q( TDataList1.DataSource = DS
    8 Q/ C! H  ?% X( Z1 {- BDataList1.DataBind() 5 r( N/ A5 X" n, z, y
          4. 设置服务器端控件的焦点* w) n* P1 ^# c7 R7 D
    Private Sub SetFocus(ByVal controlToFocus As Control)6 ^2 F( g' X! E' H0 G' c
    Dim scriptFunction As New StringBuilder* y) C7 L/ _$ p" R2 j# _% G4 S
    Dim scriptClientId As String) H; ]- X' j$ o8 o" _$ Z. v
    scriptClientId = controlToFocus.ClientID5 N: E9 V' ]* J8 j3 x
    scriptFunction.Append("<script language='javascript'>")% F7 o2 v4 R: ]* ~6 c/ V  j
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    : s7 W( x' Z! OscriptFunction.Append("</script>")7 l" p& `1 z9 v4 u
    RegisterStartupScript("focus", scriptFunction.ToString())
    3 J3 G; w9 Y+ U7 KEnd Sub
      f* }5 q' W* }, n9 s6 FPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    $ l/ K2 P8 d! N" d3 O" Q9 {MyBase.Load( T6 c, d8 l; |. R- w
    If (Page.IsPostBack = False) Then- f% l! q' n+ N$ o% Z+ g" n
    SetFocus(TextBox1)
    ) E+ r% q& ?% l4 q/ L' SEnd If- O4 _/ u1 j/ \9 q& U. Y& Z7 V7 i
    End Sub
    - k3 A0 s% {; y/ j  5. 滚动DataGrid3 k& [# b( B& |2 G
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    ( H: l3 e# f) y9 H- C7 w7 g  R4 k7 A- \有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    2 \, r6 u! S8 f1 ~件放在一个DIV中将overflow属性设置成auto
    . T- Y# h* q! P/ ^$ g& ]: t* Y<div style=“height:400px;width:200px;overflow:auto”>
    " ]/ [% U  G. ]+ x( F% n+ P9 t<asp:datagrid id=“MyGrid” runat=“server”/>
    ) a4 i- g8 p- ?: N8 X; I' |</div> 8 _. y1 L  z& j$ o0 L
      6. 动态创建控件
    ' H) X( Z6 f- G: P& q  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    & r5 m& h) v8 RSub Page_Load()4 k* M6 _2 Y: ~4 P! x2 [; c
    Dim i as Integer
    , z, q2 j7 W# g8 \For i=0 to 4
    * S# |6 P" k& WDim myUserControl as Control
    2 i6 j  y/ W- {( ^$ |3 V, S9 lmyUserControl = Page.LoadControl(“foo.ascx”)
    * B, S# a7 C' ^# fPlaceHolder1.Controls.Add(myUserControl)2 J6 X/ o% W" ?- B
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”)), A- n6 S1 b" I1 p# w7 Z+ u
    Next i9 j; e1 h- Z3 Z" a
    End Sub
    5 M( R8 Z% o; J- s9 Z  7. 客户端代码的使用$ n+ F6 Y& D% h; F& P0 M0 C0 _
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标( Q6 v/ \& P# m' Z0 m% }4 Q) J5 j
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性
    + o, i2 R7 [! k! ^! aasp:ImageButton id=“foo”
    , ~4 Y) a  H# j0 M" A0 cImageUrl=“start.jpg”) |! `8 v, ^$ H6 b) T
    onMouseOver=“rollover(this);”
    + g/ \, j; k5 u: z2 X8 }1 fonMouseOut=“rollout(this)”  ?* O+ b: I- A4 v
    rolloversrc=“myrollover.jpg”4 _  ?9 {9 X: A' i! z/ c% \
    rolloutsrc=“myrollout.jpg”
    ' h" ~% c$ [" `" lrunat=“server”/>* w. S4 S5 l) y/ E2 w* V
    <input type=Button onClick=“return clientHandler()” 2 ?) ^  K: N4 h; _5 V
    onServerClick=“Button1_Click” … />
    % [4 j& Q$ d- t: ?$ k  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    * j5 I( q9 Q0 Y) r$ ]有的客户端控件。) {9 w) O7 t; b1 P* z/ ?; N
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    ( {: T" N  I/ ~& h; L- }MyBase.Load% V- t# ~! ~/ s* M* D) T( p
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    , v$ z! z) t. z$ G; b( V& g* PEnd Sub ) V$ i9 }! Y, M( n6 T* b8 E; A
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-9-17 23:38

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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