设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需+ }) {- Y6 [1 A+ K! d: o9 T
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    - f( [) L: ^# Q% t  1. ~ 的用法
    - X9 P* i+ p7 i7 s  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方! }0 e- \) G! Q# s. e& `
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不
    2 [8 Y" h; ]! }3 G同层次的两个目录的aspx文件分别引用时,问题就会出现了。/ L2 m2 {( D$ X2 d0 z
      ~/image/about.bmp ! w3 L2 z4 K0 C* J7 V
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更
    * z* k! R2 b" Z+ F- p) t, a' b0 H4 y加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    7 R" L% s2 D4 Z7 {" B" I- L它。
    - @) J  c5 X) p& i. {/ Z5 B3 r; s( i  2. 在刷新和提交页面后,保存你的页面滚动条的位置% K5 I' a! H6 H$ ^9 S* R
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说# |. h. k! g! a: _, I8 H8 ^
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    1 {  `+ w5 |$ ~# T0 v1 {组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方3 \2 ]) u! a' K
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
      ~3 y& f# c% }& F个控件又需要他选择一下?
    4 n1 e& y2 Y1 a% c) }# d  用下面的方法可以很快地确定和记住你提交前的位置。; @  J( T+ ^" V. B8 V/ e1 L& h0 D
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    2 t0 H  w- Q* m( l6 V不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    : R1 S6 W8 F3 E2 ~5 Z* ZPrivate Sub RetainScrollPosition(). e3 ]9 Y3 r. w
    Dim saveScrollPosition As New StringBuilder
    3 P& H8 G6 v2 b( uDim setScrollPosition As New StringBuilder
    + @4 L* w$ p5 ?" fRegisterHiddenField("__SCROLLPOS", "0"), {) \8 d) f# U7 T4 D/ l/ u, m
    saveScrollPosition.Append("<script language='javascript'>")0 Z2 r; i/ l0 E$ _9 V* q3 V
    saveScrollPosition.Append("function saveScrollPosition() {")
    & g4 m, e+ X) ]. MsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    " T, t8 h. ~  A9 ?( ^- XsaveScrollPosition.Append("}")2 Z- k: K- R# f) V# [& _9 }
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")6 I5 Z( x7 ]/ _- T& `% f
    saveScrollPosition.Append("</script>")
    1 I- B  y) M6 C* e  p5 [0 u0 l  ?: h9 xRegisterStartupScript("saveScroll", saveScrollPosition.ToString())3 {9 l$ h. _; G0 h7 t4 g: A: j
    If (Page.IsPostBack = True) Then4 w: r$ w; w6 y- x" g. M( y
    setScrollPosition.Append("<script language='javascript'>")1 ^* m% P" q) {/ i
    setScrollPosition.Append("function setScrollPosition() {")
    ( p0 g+ h# v+ G+ L" ksetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")0 x- T' w5 S, t8 {# s# B( P% H
    setScrollPosition.Append("}")2 ?4 u1 G- S! q- d% {/ _
    setScrollPosition.Append("document.body.onload=setScrollPosition;"), b4 |, X6 x0 J# B  T! F
    setScrollPosition.Append("</script>"): c$ R8 Q' m( k& A3 Y! O+ Q7 f  R$ ]
    RegisterStartupScript("setScroll", setScrollPosition.ToString())
    ( O' R' ]' U, I  ]& I0 A! ?End If( E& U% y) a( I/ c1 J
    End Sub
    8 l. E: z$ R6 W2 p2 TPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles : ?$ g5 e& O2 z& D! i, c
    MyBase.Load
      P$ i$ U2 b; ]* o6 K2 NRetainScrollPosition()+ E( ^% P+ ?# o+ U. C2 Y! o2 o
    End Sub
    ( [4 ?6 ]8 R3 r( r4 D- D5 X* k; E7 i( l/ J, E9 T1 v
    3. DataList使用不同风格的模板
    $ ~7 w* d% N5 p9 J- |* U5 ~# F9 O& o( t  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    4 a+ @! Q4 }4 ~! ]8 g) h' ?. C件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    6 N, i) a$ l# V; O$ O元素或是加一个促销广告图等等。/ I  ]8 r% W- Y* W/ e
    Dim theme As String: J- _! u" A9 Y4 c. L. x( N2 [( o0 B
    theme = DropDownList1.SelectedValue& B  @2 ]. X$ T' j: o7 q' Z, U
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    / K2 e; `" c" T" c2 i; \0 U2 C& uDataList1.DataSource = DS
    8 K1 \% B% C0 }5 i; fDataList1.DataBind()
    . s9 ~/ k4 w0 m2 q# H: P      4. 设置服务器端控件的焦点
    6 r% Y' x5 i) [3 g4 _2 iPrivate Sub SetFocus(ByVal controlToFocus As Control)
    4 j2 k, f* K! |- ?6 L1 l( i4 v2 fDim scriptFunction As New StringBuilder' i" c$ e( t6 H% J
    Dim scriptClientId As String. v0 d; M( e0 X  c. h
    scriptClientId = controlToFocus.ClientID
    * U# T  t9 e" h) `+ `scriptFunction.Append("<script language='javascript'>")
    7 ?# u. c8 H" {4 ^' N1 r0 gscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")+ p' o: O( F5 I7 O
    scriptFunction.Append("</script>")
    3 S3 |4 @& M0 H* J5 J/ wRegisterStartupScript("focus", scriptFunction.ToString())
    , [5 P# ^( Q3 F+ ^4 @$ KEnd Sub, K$ ]( ~6 {2 g# v- O
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    5 w; x2 W8 k0 j6 a6 ]- aMyBase.Load  Z8 {# ~  M/ S5 h' F4 e& e0 N
    If (Page.IsPostBack = False) Then( B) A+ _" w$ |/ A, Z- }  {
    SetFocus(TextBox1)
    3 `; `& A. w, S# _5 VEnd If" e& q: u/ D5 p6 E
    End Sub
    - d- }7 ]1 y* S; @! V2 S  5. 滚动DataGrid
    7 x7 X3 P% c! v/ p  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    7 |0 x/ m- n) g/ |4 e; V有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    - e  S: d! a8 J2 K8 a5 C  l件放在一个DIV中将overflow属性设置成auto
    : K2 o9 Q5 {; q- C8 l9 {4 `0 z3 T6 ?<div style=“height:400px;width:200px;overflow:auto”>1 X; y! G; l1 I4 g
    <asp:datagrid id=“MyGrid” runat=“server”/>
    & |" y& `% D) N1 o) L4 {2 ]</div>
    ; W$ |$ c# h! k, }1 {# h6 m  6. 动态创建控件* s' u+ z* P" V. v7 \* k
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    5 J- u- ]' @3 l) x$ o+ L4 NSub Page_Load()
    " N6 f1 D! c. c# D+ }" E5 k) gDim i as Integer
    6 N: Q% Z+ j- l4 O! ^. ~+ SFor i=0 to 4 5 c& P. p: p& P, \8 M! {+ h/ ~7 J- N
    Dim myUserControl as Control+ \8 U2 V) }. L  G. b: ?( p
    myUserControl = Page.LoadControl(“foo.ascx”)5 k( N+ E& c! V3 l$ J, }) X" k. U
    PlaceHolder1.Controls.Add(myUserControl)4 E; [4 q, l! W( ~& _1 H* n
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))+ U! |' i" n, l
    Next i& l4 ~/ L0 D& L  ?; L+ w
    End Sub ; e2 X5 M+ s7 N' [  `
      7. 客户端代码的使用
    3 s4 x8 c. I( \& q+ [. {6 ^  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    + r" g1 y- r! ?1 y: e3 _3 B准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性. ]* d. V$ a0 {, y# ^- n. P) I
    asp:ImageButton id=“foo”
    , R+ y4 k2 U" X  P+ mImageUrl=“start.jpg”1 C( t% ?; R: E) ~
    onMouseOver=“rollover(this);”
    % |$ D* H" `1 N7 r6 k5 x# A) QonMouseOut=“rollout(this)”# S2 s, p0 L( Q
    rolloversrc=“myrollover.jpg”
    9 P" d4 n$ x# H' c4 L8 y6 Prolloutsrc=“myrollout.jpg”
    % u9 H. C1 P' k% E' X1 grunat=“server”/>
    4 O, r, b9 v+ G' l, M1 x<input type=Button onClick=“return clientHandler()” 5 W9 q6 s, z- d6 p( e4 z1 Q5 V
    onServerClick=“Button1_Click” … />
    9 Y/ g/ a  i! ?  @0 P  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    - u) w( R: y6 Y  s* }: f/ S有的客户端控件。
    % g5 S8 s% C2 S  ^- z/ JPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles ) U2 y/ F; C' n2 U4 H( x
    MyBase.Load3 M/ e: n. Y! H6 c6 X
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")  w5 X! C9 [( e; r' u# \' H: q: o
    End Sub " S) O$ G9 H# e5 e0 i. _$ ]- B
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-11-5 17:26

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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