设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需9 z9 t& e7 c. m& E% U* t# |
    求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。* H6 \, [; c: W4 m& R' C" h
      1. ~ 的用法
    . g/ F4 m) o7 t. p  一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    ( U- ~% }0 M. u* _4 S式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不0 G+ {1 I0 V3 x# H& [
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    2 U8 _* A' g6 ?7 }( f  ~/image/about.bmp 2 D& W. A2 p+ \. N' ]7 \
    是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更+ b0 ^9 B$ @& e
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    ; _2 g* Z, c# U0 b$ h. s* Y它。3 y. |" R" M5 \4 M. ?% X  ]9 Y! K
      2. 在刷新和提交页面后,保存你的页面滚动条的位置# J, E* s1 ]8 C: t" D+ z% c
      经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    - w. M: @6 Q1 a* K9 B& p# L$ ~用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸0 ~6 ]1 _# c+ F; O
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    ; i7 K1 P# Q0 n8 F; i也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,3709 v2 a0 f% G! f  ^( s
    个控件又需要他选择一下? , r4 |, L' O' `- q+ {/ l/ s0 x
      用下面的方法可以很快地确定和记住你提交前的位置。" K' Z5 j$ |! m* _, I7 N* P) f
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,' m  r3 n! |4 A! q) v5 j
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件
    / I3 {0 B  S! O* S3 a$ ^Private Sub RetainScrollPosition()
    ! u- o4 G0 q7 s3 p$ LDim saveScrollPosition As New StringBuilder
    6 y+ q$ c& V; c0 G4 W% FDim setScrollPosition As New StringBuilder
    . m% W/ q3 D- ?5 Q: IRegisterHiddenField("__SCROLLPOS", "0")
    % x+ z9 E) z6 @& I+ T- ], osaveScrollPosition.Append("<script language='javascript'>")
    / z" R4 ~7 X4 I4 E) P% s& ~5 \saveScrollPosition.Append("function saveScrollPosition() {")/ X$ C0 [, V$ j& g8 P, F. G
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    ' b0 N' |( b) @3 T. d7 y! zsaveScrollPosition.Append("}")
    ) u$ G7 @" k, m+ nsaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    - b- }" C+ y9 Z4 e4 |6 A; i. x0 c) HsaveScrollPosition.Append("</script>")
    ) b7 D3 x# U$ P: r2 D4 KRegisterStartupScript("saveScroll", saveScrollPosition.ToString())8 F9 i3 P; d; h: X: u5 y4 S1 O
    If (Page.IsPostBack = True) Then
    , W- ]6 Q5 c7 rsetScrollPosition.Append("<script language='javascript'>")
    : ?" x* N8 W# p: N% R! i9 isetScrollPosition.Append("function setScrollPosition() {")
    4 [+ u2 ?0 c: }) wsetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    " U( D* A: W  [+ V8 c+ FsetScrollPosition.Append("}")
    8 ?5 A9 W, S3 F, k+ ]setScrollPosition.Append("document.body.onload=setScrollPosition;")
    : T- }& }; ]8 l) H) N% B" p( X9 T, {setScrollPosition.Append("</script>")
    6 p% D0 H' v- N% SRegisterStartupScript("setScroll", setScrollPosition.ToString()), J) ]/ I) X; t9 D. _' w
    End If
    ' q: `0 O! i1 i2 s7 L9 bEnd Sub
    ; [1 v; L( c! q) |2 GPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    2 A9 h( O$ Z( F$ i+ `MyBase.Load8 E2 z% `! |3 T" |& i/ f1 e7 L
    RetainScrollPosition()
    , s+ V0 p% g0 m3 wEnd Sub
    9 P6 ~/ l+ n# l3 U4 w% y. I
    - `. d3 B4 l+ x1 E3. DataList使用不同风格的模板
    ; ?5 T6 Z7 J  D  G8 `  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条! s4 \9 j( I, r2 o/ S/ S
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    ' s+ r* h  \' W/ B4 ?) P. L& |0 k元素或是加一个促销广告图等等。1 L: X; w& g7 F6 Q! C; f
    Dim theme As String$ Z  s  e. T3 ^& J
    theme = DropDownList1.SelectedValue8 R% K/ u. d1 {# A1 _( Z/ V
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    9 |) J( W- u8 x2 K- [  b6 e. UDataList1.DataSource = DS
    ! v: `) ~1 }% h* S4 pDataList1.DataBind() ' b0 l$ n" u, v; W, S
          4. 设置服务器端控件的焦点
    1 k3 ^( b/ p. C& K# P4 r$ |. v+ bPrivate Sub SetFocus(ByVal controlToFocus As Control): e; j8 H& w& m8 u
    Dim scriptFunction As New StringBuilder
    ; k( j. z% T4 k! q3 P" ~( LDim scriptClientId As String7 r+ a; \- {/ s% E0 V% S
    scriptClientId = controlToFocus.ClientID1 p4 t! @: \  W8 [4 W( N
    scriptFunction.Append("<script language='javascript'>")
    0 A9 P+ p; `7 a& CscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    ' i. r/ r) w& w& W  i2 NscriptFunction.Append("</script>")
    - ]) r! ]. @, n/ b3 E2 ORegisterStartupScript("focus", scriptFunction.ToString())
    6 O7 y3 i: x$ x2 y' F, S- X' vEnd Sub
    ' K6 A& s# W6 p0 ]  @: mPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles - ]$ m7 z  g" ~( \, j2 U. _2 m* b
    MyBase.Load
    & k% F' K6 W/ J' J+ nIf (Page.IsPostBack = False) Then
    8 B# k3 t4 L5 l' DSetFocus(TextBox1); x$ N; i8 J/ q$ ?. [, R- F
    End If
    4 \) a; E. C6 E' pEnd Sub
    ( O, l  U7 y0 H6 D1 j1 b) j  5. 滚动DataGrid3 T8 T) Z( j/ M5 B/ A0 `
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    9 p9 g! B1 A! H. v5 w. g有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    / l' t. ]- U) c' o件放在一个DIV中将overflow属性设置成auto
    ! r# u6 i4 m0 T: B# V$ m2 F<div style=“height:400px;width:200px;overflow:auto”>
    * h" Z3 k  W. L, Q8 H- G<asp:datagrid id=“MyGrid” runat=“server”/>
    9 o( w" `: Q4 @9 B</div> " |9 y$ b" r+ m1 T
      6. 动态创建控件9 L# v0 T1 B5 B3 f8 ?  V9 P1 M5 K
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。5 f/ q1 k0 W, s9 ^% i- h+ e
    Sub Page_Load()- v) Q' }* Y2 i, z
    Dim i as Integer
    + {1 l. j  c4 g5 {* OFor i=0 to 4 , g/ @  ~5 L, Q5 V' _
    Dim myUserControl as Control
    . E8 O" O" c. h' v, W: EmyUserControl = Page.LoadControl(“foo.ascx”)' W& D' M& k3 e% C
    PlaceHolder1.Controls.Add(myUserControl)) e- Q: q! O7 X# {3 \4 U3 w
    PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    / P, H6 S7 x( E" n- J) U  s- e+ u- @! kNext i
    $ Q# g  k& h, E" V4 |. kEnd Sub
    9 f; P& F$ s) T$ T' d# Z  7. 客户端代码的使用3 y# t/ G7 g; L' I0 h$ v* e
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标
    * V, q/ ?! D: _: f. [0 `准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性  U! J$ E% ]. ?: p" v
    asp:ImageButton id=“foo” ! n8 t+ I9 ~- `+ T/ B9 {1 z
    ImageUrl=“start.jpg”
    3 P5 |' E/ t: h+ @" ionMouseOver=“rollover(this);”
    ' g; D: \3 B( ~  v9 A$ A! yonMouseOut=“rollout(this)”- x, \6 c0 Z# T. P
    rolloversrc=“myrollover.jpg”4 b% O4 j  N+ V1 p( ?/ Z
    rolloutsrc=“myrollout.jpg”
    4 g/ K9 \" f1 _+ D4 H% @) p( Krunat=“server”/>
      i: F' q- C# K9 M! Y4 E% A<input type=Button onClick=“return clientHandler()”
    * @5 J7 y3 D: G3 monServerClick=“Button1_Click” … /> ) \3 J. U' z4 ?6 A
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    4 ~: u4 ~2 Q  C9 D) n5 X有的客户端控件。
    ' ^7 G7 W1 F( E0 J1 uPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles   N4 s  `# q% V& `5 @
    MyBase.Load1 I' {, `' Q  p( s0 ^* T
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")9 w: Y" B( g0 D9 X6 r3 q7 _) m
    End Sub
    2 S6 O  ~- d' t! C& n% n* m  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-9-18 10:29

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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