设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    6 H3 _% ?% D* W求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。3 I+ u3 A3 Q1 q3 ^
      1. ~ 的用法
    9 W* V% w% e* B; S, T2 c  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方* u4 S  p) u, c3 |2 N: y0 b9 L
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    1 o( \$ Z7 }. [+ `' t. K. a9 L. W同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    ; t) o5 }+ r$ A; o1 m6 l  ~/image/about.bmp
    9 ~4 t2 d$ w9 C  R' q: K6 M' v是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    + p1 j- E% K. ]* I" t加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    9 h) D1 x3 e& `8 R# J它。4 v: Y! A+ o2 F: E$ p$ s
      2. 在刷新和提交页面后,保存你的页面滚动条的位置. q! Y' F+ W6 ]! W+ y5 r+ j3 y
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    ! Y% ?3 V6 c6 g+ [6 n用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    . o' O: x# [$ x3 r组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方6 x) Z. a+ ~1 Y1 ~* N
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,3709 Y; n  k+ x. P$ e; i1 A" A. s
    个控件又需要他选择一下?
    % `* h3 `6 l. ]/ j  用下面的方法可以很快地确定和记住你提交前的位置。1 [  \1 W+ G7 \% O- f5 l
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,- l" l" N( r' S( t5 d
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件5 p5 a/ w5 r6 ]2 j3 k2 c
    Private Sub RetainScrollPosition()' i3 r) C1 ?2 w. g
    Dim saveScrollPosition As New StringBuilder# v( F) x& Y- X$ n& u6 t% c2 @
    Dim setScrollPosition As New StringBuilder
    & i7 x  \4 H1 U4 yRegisterHiddenField("__SCROLLPOS", "0")
    , o/ f8 [  i; AsaveScrollPosition.Append("<script language='javascript'>")
    - E2 R' v, ?+ s* XsaveScrollPosition.Append("function saveScrollPosition() {")
    : T4 V. U% E0 m2 q( Y( Z+ H7 K0 Q- LsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    1 i' P4 t4 }' gsaveScrollPosition.Append("}")6 R( Y+ q8 A  p( M
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")* N, `. j( S$ Q& n2 o/ S
    saveScrollPosition.Append("</script>")$ R' ^1 R6 ^4 V4 \; j7 a( r3 l0 s
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    7 u' H0 p: \3 {9 k+ L) A2 f+ MIf (Page.IsPostBack = True) Then! C+ h) N( P) y6 r7 G5 y
    setScrollPosition.Append("<script language='javascript'>")
    9 {; f1 A/ O$ y6 d* _setScrollPosition.Append("function setScrollPosition() {"). [! O, o0 t2 R1 r, ]6 G9 A; N/ @7 w
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")! B4 K2 [( p  M8 m! h$ x
    setScrollPosition.Append("}")4 S4 N3 R/ L8 t# }% ]& T
    setScrollPosition.Append("document.body.onload=setScrollPosition;")' s% e9 K* U1 r
    setScrollPosition.Append("</script>")
    , N1 Z& ~4 n$ i% @! T: SRegisterStartupScript("setScroll", setScrollPosition.ToString()): ^' t# h! Q" ^; }) d
    End If+ H( B$ e+ D, M( B' v
    End Sub
    - |  ~$ \. y& }Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles % Q8 b# B/ U% O) m* G
    MyBase.Load' R  H0 ]5 ^6 b# i) t" x
    RetainScrollPosition()
    0 y% B; \: |5 D8 ?4 xEnd Sub ) r& P1 f9 J, S3 f' y$ S

    5 w; c# i8 ?2 Q  y7 t3. DataList使用不同风格的模板: z3 J" X( y2 l4 l( G
      这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    ! d9 @* j+ K! U1 V3 h5 V; \8 L' _件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个' \7 O' b/ O. t
    元素或是加一个促销广告图等等。
    ) T- i1 N& E5 {. c' T' WDim theme As String" f' K3 L( r* g1 W; z5 [3 N
    theme = DropDownList1.SelectedValue
    2 B! W; y( O0 R" v" j! @DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool1 F2 l, K+ A2 `3 i7 }: h
    DataList1.DataSource = DS
    ! [' w1 S+ l. Z0 s8 aDataList1.DataBind() & ^0 g2 B% j4 C, N0 z  M
          4. 设置服务器端控件的焦点+ d# {1 W( R" Y" D- i; @% n7 E
    Private Sub SetFocus(ByVal controlToFocus As Control)- Y+ h# z! B2 B% `  |, o- ]% y, E
    Dim scriptFunction As New StringBuilder/ W) n8 J1 ~6 P% {/ g- ^+ U8 y
    Dim scriptClientId As String
    1 X6 e# Z& a# g1 m% mscriptClientId = controlToFocus.ClientID
    9 ]0 O) N  V! t# |scriptFunction.Append("<script language='javascript'>")
    " o; ^( y0 g: O8 ?scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    2 o- R9 R7 \( _3 O3 S+ S7 QscriptFunction.Append("</script>")
    . z6 P. R/ p) l2 jRegisterStartupScript("focus", scriptFunction.ToString())
    1 H, _2 d# M1 n( x4 MEnd Sub, E; L" X$ E6 A! F' h
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles " l7 E' r, n" s& |
    MyBase.Load" A; f/ f+ R2 e
    If (Page.IsPostBack = False) Then! p5 i" V0 k* j: N) A
    SetFocus(TextBox1)$ R& h5 ~8 P' a, C. q# p; y
    End If0 B; z( ]7 G# T- a: y" k/ }" V% D
    End Sub # E. [. T. Q# K# b* ^* K! |
      5. 滚动DataGrid
    3 C; n* u- n) K6 d  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只# k! N: ]! Z+ H2 V2 |" u
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    ( r- |0 `* Q  B1 W件放在一个DIV中将overflow属性设置成auto
      t) q, z& V, a) F8 p3 Y$ T, P6 T) O/ Q<div style=“height:400px;width:200px;overflow:auto”>
    % L8 _2 K1 h  u! A0 k$ @<asp:datagrid id=“MyGrid” runat=“server”/>
    1 h. m8 P, x* y# p( G</div> 8 D8 n; m) V1 ]1 c" C; T) e
      6. 动态创建控件+ I1 c7 g7 L% Y$ N- N9 F5 o, b! p+ y
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。7 _! Q3 V( M# [! N  j
    Sub Page_Load()% I2 C8 i  O) g% g/ S4 B. A  d* {
    Dim i as Integer, @4 b- |( b' b
    For i=0 to 4
    , s) F& l$ u1 {' p' E! N2 tDim myUserControl as Control! w: G) |& z2 ^! F5 y. ^
    myUserControl = Page.LoadControl(“foo.ascx”)
    8 I8 P9 M: P2 p% X8 G) nPlaceHolder1.Controls.Add(myUserControl)
    5 ~4 {- A2 a6 ~  X" O: qPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))- a( K: E2 v/ ^% G9 V) R
    Next i
    2 F# C7 G$ h4 |5 j5 W7 |End Sub
    , a0 @, e! {$ \2 n% x. i  7. 客户端代码的使用5 h: U  e6 a; E. u- S6 C3 g5 p
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    ( W/ A$ k  m$ N6 |' F准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性. @* J4 @; l- I! E5 ?% l
    asp:ImageButton id=“foo” 3 u7 x* E* f3 d7 X
    ImageUrl=“start.jpg”
    % \! X1 |$ b& A/ ?2 n1 konMouseOver=“rollover(this);”
    9 ]' G8 d2 B2 e' {onMouseOut=“rollout(this)”
    6 @4 a: o( t- s* T' ?& z/ U2 Trolloversrc=“myrollover.jpg”* O- U* h/ B6 C" o1 V, ?
    rolloutsrc=“myrollout.jpg”
    6 X" X) y$ B  [4 T. Erunat=“server”/>8 b4 i1 ^( X7 m2 T
    <input type=Button onClick=“return clientHandler()”
    * o0 G4 Z" u4 a) oonServerClick=“Button1_Click” … />
    ' D+ ~; ?: S' w! Z- |/ M  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    " b/ _1 K4 q! {/ Y, T! Y8 `有的客户端控件。8 n" g4 R- n) }7 L0 L5 R7 {0 c/ \4 S
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles - V9 k& m7 C* ]0 W
    MyBase.Load' w( R# ?: S' X0 X
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    0 P$ t. b* L) J9 E1 C9 {End Sub 8 y8 I3 g7 D0 U5 X) w& {
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-11-3 00:48

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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