设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    4 X. R7 o0 |8 @# Y: j3 v求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    ' w2 M1 I9 j2 G/ ^6 Y) K4 H  1. ~ 的用法
    * S! S; ^% K0 P4 ^6 k0 d  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    $ x  p/ H; D9 x+ |9 P) B式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不$ P' e* e2 X7 m5 ?2 v' l. @
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。/ E0 a2 K/ ]0 |' Y/ J; [$ }% u0 H* I
      ~/image/about.bmp
    ! @2 t1 A, A8 _4 c8 j5 o是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更7 m' C4 A2 c) s1 |  z' G4 P
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览7 O, g" u; |% {: l4 M$ O
    它。& _& p8 Q; Q( n# n+ l: `1 [, O
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    - q: i1 ?8 X& o5 X* I% x8 m  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说# S3 {4 Z" K  @" F+ M. L7 J- E6 P
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    , |. N, w' U! B% m! B  ?( ^. }4 h组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    ' a8 C: R4 S' p! Z( p4 E3 T' n. ]- i也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370. L- M. b5 ]4 D
    个控件又需要他选择一下?
    # C( ^4 u& Q0 ^6 ~. _4 O! \  用下面的方法可以很快地确定和记住你提交前的位置。
    " I( M5 J, F9 L/ A' `6 h  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,9 ?1 |6 p6 e9 U$ K7 Z* o
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    % w4 C7 r1 s6 {6 S( VPrivate Sub RetainScrollPosition()
    6 Q. p* O8 G# Q: O% z* o2 X4 oDim saveScrollPosition As New StringBuilder* Z! E/ i" r; q! I
    Dim setScrollPosition As New StringBuilder! _# p3 m8 q0 H6 x6 o2 V' T: d
    RegisterHiddenField("__SCROLLPOS", "0")- A& s8 N( K& r0 e; G
    saveScrollPosition.Append("<script language='javascript'>")( Z* e1 m) |8 s- u8 C
    saveScrollPosition.Append("function saveScrollPosition() {")
    / g: V5 w9 }2 R0 N2 g4 YsaveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    - P! C5 r3 Y" W# asaveScrollPosition.Append("}")
    : V3 \9 D' \; N1 m; G1 _saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    3 \) K/ [2 ^# |saveScrollPosition.Append("</script>")" ^9 C3 D6 Q, ?) z
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    3 }$ n6 J/ `: @" WIf (Page.IsPostBack = True) Then5 t: B( |3 t, n$ ]- t" h
    setScrollPosition.Append("<script language='javascript'>")
    / ?" a9 W) l/ G$ r: p/ UsetScrollPosition.Append("function setScrollPosition() {")
    : i6 o8 c$ [$ J8 VsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    % Y% l6 h. }! I* a. L) M! RsetScrollPosition.Append("}")
    0 K; f- x) A. W9 |3 B% [5 \setScrollPosition.Append("document.body.onload=setScrollPosition;")
    4 w, `7 ?! [' U' e0 }setScrollPosition.Append("</script>")! o& X! `0 O- d' d* e. k& P9 a
    RegisterStartupScript("setScroll", setScrollPosition.ToString())# E0 D+ w/ ]& U6 M$ Q
    End If! e. s$ I  g8 {4 U4 [' u( E
    End Sub
    & s  `- u5 V0 f5 x3 T0 KPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    : j7 o1 [; G* A" iMyBase.Load: {* P# Z, G" V6 O
    RetainScrollPosition()! u' N0 F4 e8 x% F6 @
    End Sub : L7 F5 X% `2 ]5 I

    : G5 F3 J/ G% N' d( U2 ~3. DataList使用不同风格的模板
    $ ^+ a# \1 X" c9 K  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条
    2 i# u- ~& A) ^7 t( h( a. M* @9 P+ F件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    ( k% M' W* V$ h& M$ k' P元素或是加一个促销广告图等等。
    ' M3 S' T- G# O: }Dim theme As String. C$ e2 Z% R; ^/ H9 U
    theme = DropDownList1.SelectedValue/ \5 e* k* m! r0 }( X
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    & |/ a, z7 o7 V+ x# V' K8 hDataList1.DataSource = DS
    ) `1 B0 }8 h8 `4 z# ^DataList1.DataBind() & c: }' e) m' `8 T- c0 |" z
          4. 设置服务器端控件的焦点  S, ~8 L3 T4 Z
    Private Sub SetFocus(ByVal controlToFocus As Control)
    ! {; B1 c$ P5 r  R5 oDim scriptFunction As New StringBuilder* R- l) O+ P* [
    Dim scriptClientId As String9 v9 {+ P7 f" z. ~
    scriptClientId = controlToFocus.ClientID' `0 I  @: d8 w2 f; O  {; G
    scriptFunction.Append("<script language='javascript'>")6 F" O' ?$ M0 ]& N5 [
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    - T( z. T3 W, {+ m+ dscriptFunction.Append("</script>")3 a! x) N5 v* [5 k' \
    RegisterStartupScript("focus", scriptFunction.ToString())
    ) o; B, C" D* O! W: [End Sub8 s, U2 w  ~; I5 T' D* `; c7 F$ ]3 h
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 0 I1 {  A8 q8 R( x6 O- r/ ]
    MyBase.Load
    1 \0 Y# O- f# X0 F  u5 |, XIf (Page.IsPostBack = False) Then
    * H. v  G9 u' u. nSetFocus(TextBox1)
    ) V- m# R2 L# V, |  ?( j: {& y3 {End If
    6 y; Y( F9 l1 S4 m! S. y! A% EEnd Sub
    * h6 H$ v+ _/ N7 D4 @3 g4 v) S8 [0 M  5. 滚动DataGrid( b+ e4 E3 D0 G, v7 V
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    " P  `2 O" m/ C4 E8 C有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控. k8 b" @$ a( E+ M& `3 ?6 Y2 s6 B" Z
    件放在一个DIV中将overflow属性设置成auto
    9 S6 K, z4 `  B/ Y8 l2 D; d) K<div style=“height:400px;width:200px;overflow:auto”>( ?4 P9 v2 e8 N* `3 m1 m. K
    <asp:datagrid id=“MyGrid” runat=“server”/>
    % t! R7 [& L0 a& A( [</div> - H8 @; o& f- ]
      6. 动态创建控件5 o1 g7 V1 a3 U
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    6 G% b' V  H) G% u# e1 {Sub Page_Load(), X3 M0 P" H& ~) J
    Dim i as Integer
    ( P# x. z' m. h5 [For i=0 to 4
    5 T0 k7 F  u( lDim myUserControl as Control) s4 p4 f8 K, t: t+ M" T, h
    myUserControl = Page.LoadControl(“foo.ascx”)
    7 U/ h/ U/ f& y  h' D+ Q$ SPlaceHolder1.Controls.Add(myUserControl)
    ( d0 u7 Z& X$ c: C5 D5 n) P) e2 O' RPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))9 u" ~6 K! @, L. K6 u1 b& N
    Next i
    8 V3 Q& x. K* _/ G, CEnd Sub 4 u+ R: U$ \  u4 E! F( B' I
      7. 客户端代码的使用
    & ]% O. Y! _: t6 f( k  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标' x2 l; b% f# G6 x1 J
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性$ j% \4 I: `( C. |0 W! r- P
    asp:ImageButton id=“foo” 5 y/ O! U8 }, j& H- Q/ u
    ImageUrl=“start.jpg”# R2 q# `4 j' w( I: w1 X1 Z& Y
    onMouseOver=“rollover(this);” % v! g5 t5 q, v* F- I3 I
    onMouseOut=“rollout(this)”) P: Z! F* t$ q* h7 Y1 E) A( w* ~
    rolloversrc=“myrollover.jpg”
    % F4 P: f+ e. U% ?9 a& c9 E& @) {' yrolloutsrc=“myrollout.jpg”
    % ]% U* C  w8 C1 t' W; \runat=“server”/>0 l9 o8 W; Q. R
    <input type=Button onClick=“return clientHandler()”
    " _. Y/ n- d2 x  a0 q5 [onServerClick=“Button1_Click” … />
    ! o" A9 ]* m$ T; M  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    ; ?7 v3 D2 h& p3 X0 [9 t有的客户端控件。
      z7 O5 ~3 U! f' F7 X% a  N' h# xPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    ( E' t6 i( Q, n+ y9 D9 V9 H7 i0 aMyBase.Load
    0 b0 G5 x  k5 ^& _4 [ RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');"): `9 l) E6 M" Q( N. x# o- q: z- I) T8 W
    End Sub
    % ]5 S5 V& C+ S  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-9-15 23:45

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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