设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    . \$ W3 N# f* Q求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    9 U* d' [- L( \7 G6 y  1. ~ 的用法
    ) L+ U/ x3 U4 c  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    8 Y$ ^9 B( Q* j. W- @: z$ C+ e式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    " `! ^& \* A* `) ^! B/ x2 g同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    % {4 s1 Z2 w# ?: {; s  ~/image/about.bmp : w% c5 E" v5 _5 A% G
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更* c' T; g# a  U) \! D/ K
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    & _" ?! D* R8 _# d它。( R7 R- F" s) m  q! Y. N
      2. 在刷新和提交页面后,保存你的页面滚动条的位置  `- N! N2 W& i7 o- C% F
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    5 Q4 B0 j, b$ O" x+ ]( H2 T用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸/ L9 E- q; l- y: G! o( S
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方! ^% m; y7 F; m& \
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370$ x! J7 D: ?( Q2 O6 g% ^2 E
    个控件又需要他选择一下?
    % ]) T, ]% c2 ]! C+ `7 E  用下面的方法可以很快地确定和记住你提交前的位置。) i0 b, g$ O9 S! j. b- B
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    9 p8 V* B/ S9 j; ^) {$ ^; N不过他使用了Web Behavior这意味着你需要使用一个.htc文件0 t. I: s3 D4 h5 k$ [) M. Z
    Private Sub RetainScrollPosition()
    % F4 R. _0 V# vDim saveScrollPosition As New StringBuilder
    5 X. I/ v& Q) k7 Q% x% ]Dim setScrollPosition As New StringBuilder
    . _% p3 [3 c1 LRegisterHiddenField("__SCROLLPOS", "0")  C) o! k8 z  ]0 o) B% w: K
    saveScrollPosition.Append("<script language='javascript'>"): a7 l8 ^/ T% ~5 N- L
    saveScrollPosition.Append("function saveScrollPosition() {")" [! ~  g$ k# X8 G
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")& g& D9 J0 W0 s: U$ g$ W- P, }4 W
    saveScrollPosition.Append("}")
    ( _* y% A) G) U! B- S+ gsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")' y' V4 D" X$ ]' p* C/ S
    saveScrollPosition.Append("</script>"); W1 V. J+ I5 T
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    $ ?& \9 C/ Z0 u) u- D5 G: C) YIf (Page.IsPostBack = True) Then0 G1 Y* {& }  s& }4 w* u
    setScrollPosition.Append("<script language='javascript'>")7 p* }3 o3 o; R9 T
    setScrollPosition.Append("function setScrollPosition() {")
    9 e) J" h3 K& a. a0 nsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";"). @( u, V1 i/ d3 E! H& h: s& w
    setScrollPosition.Append("}")& V& D# G2 U0 c( D: f1 r1 [
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    ! G+ n# v! w3 V& NsetScrollPosition.Append("</script>")
    ' j# f; y4 o6 O5 s$ ^% ]RegisterStartupScript("setScroll", setScrollPosition.ToString())3 f1 ]. b; E  k! ]8 |
    End If( N6 A* s  ~% _6 C
    End Sub. @6 v" g9 n; v+ J# r4 B8 l1 l; f
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    : u" A' e0 o. A2 c( u7 KMyBase.Load. Z4 _. Q& `- U* t! P$ O( y
    RetainScrollPosition()/ x  _* h; V2 P" f
    End Sub
    ) R5 e' f( D  ]! P& B8 b! O( X7 S8 ^  I
    3. DataList使用不同风格的模板
    0 W8 A& J( K8 b' i  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    3 R' ~& E; D# I( X) Y件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个# W! z9 N5 \& n8 Y
    元素或是加一个促销广告图等等。$ j& t, u" w, C8 F2 X
    Dim theme As String
    7 U: a" i- s6 N$ ftheme = DropDownList1.SelectedValue
    3 L. h' e& n$ R4 J3 DDataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    " t  X% p# w/ t0 @) h! m* N: q- DDataList1.DataSource = DS
    8 q/ z0 S, m8 }: A8 I' @DataList1.DataBind()
    * t% P& r7 a1 `, |      4. 设置服务器端控件的焦点+ J' N% u9 R0 f! s/ v5 @
    Private Sub SetFocus(ByVal controlToFocus As Control)
    8 Z1 D. h; Z7 x/ z4 I) @& ^# d  {Dim scriptFunction As New StringBuilder
    , y+ e3 u. w7 H, Y; F# Z, Y2 I/ EDim scriptClientId As String
    4 C, `7 f7 l9 b3 I: g3 C* M7 y6 HscriptClientId = controlToFocus.ClientID
    5 m1 D/ m' `0 v9 M% G; vscriptFunction.Append("<script language='javascript'>")
    0 B1 w  D, c' Y9 cscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")% c: u; \1 P& r8 E
    scriptFunction.Append("</script>")
    3 K5 |: O4 h7 Z6 W1 d/ ^RegisterStartupScript("focus", scriptFunction.ToString())
      E0 u& t; b$ u6 o: |( \End Sub
    - \4 a$ e- m/ C3 ePrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles , a3 K* ]  N  }. w. a
    MyBase.Load
    . ]( j/ b' Q+ LIf (Page.IsPostBack = False) Then
    4 r4 m) X& ]$ O% D+ @+ SSetFocus(TextBox1)8 b' n' F# K# Z* ]" L, k( t9 k
    End If
    4 ^3 F3 [/ K1 S4 {End Sub
    9 u; I2 q& N7 `  5. 滚动DataGrid
    / ~; U3 S1 g; o/ x& @, e6 E% g& g  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只7 ]" Y3 ]' D* p9 x- u7 p8 u
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控* Y  Z, E" o7 c. r5 w4 N
    件放在一个DIV中将overflow属性设置成auto. b: Q- A/ T% w; ?9 C( }
    <div style=“height:400px;width:200px;overflow:auto”>7 t! B3 ~+ r/ t9 _3 L
    <asp:datagrid id=“MyGrid” runat=“server”/>( N& T  ^3 t$ Y  G% z
    </div>
    3 _  Q' R: [* }! r  6. 动态创建控件. b# `+ `. P7 c% w
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。; ~1 c3 ?) z6 r+ d- e$ N& E
    Sub Page_Load()8 o9 j, i- e2 O! z; m. c
    Dim i as Integer/ `& ?+ B: W8 w9 C
    For i=0 to 4 8 X) A; Q* I% z# S0 {- L' T  ~
    Dim myUserControl as Control9 x1 P" H# H+ i
    myUserControl = Page.LoadControl(“foo.ascx”)
    ' U3 t2 K' [, [PlaceHolder1.Controls.Add(myUserControl)  S8 b- F4 h* _, g0 L/ L/ H2 F% u
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    + I1 C* N0 G; l2 z$ p9 |, L" _Next i
    2 E+ v8 M* j' L7 ~3 ]. g+ I6 FEnd Sub
      j: \4 t9 w: ?2 r/ p* P. @  7. 客户端代码的使用
    $ O# d8 O. `1 U* j) s. X  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标# b. {* q2 Y2 y  F+ M
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性9 F6 k; m. _4 I; \4 O: c
    asp:ImageButton id=“foo”
    5 o# P, s' @; U8 X  U2 qImageUrl=“start.jpg”
    ' a: t1 e6 W+ T$ p* gonMouseOver=“rollover(this);”
    " M& q4 L3 x- L# donMouseOut=“rollout(this)”4 L; y0 X9 I& O2 m# m( b
    rolloversrc=“myrollover.jpg”
    . H7 p6 d* @! r/ V. Xrolloutsrc=“myrollout.jpg”
    6 ]( ^& [! p" C5 l, Urunat=“server”/>
    3 h( ^# J: L5 B9 H0 l7 u6 \) C* f<input type=Button onClick=“return clientHandler()”
    " e3 g/ e% x! h+ yonServerClick=“Button1_Click” … /> 1 ]1 r  W/ ]5 x) N  x* N
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所" ^. ]4 N/ e6 n( d* ?
    有的客户端控件。4 z# ^% C' K9 T1 t7 ~1 B1 @
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    1 _9 f( ^) E1 zMyBase.Load
    5 ?' y+ h3 w( B" n3 U RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    ; e& o  f4 x8 j6 `( KEnd Sub
    8 Q" h! }% c2 @; z8 ]: `  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-7-1 10:00

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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