设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    2 D* V. ^9 p+ j$ S: f; C! ^, [- u$ m求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。
    / q  Y3 W% }+ l; A& P; X  1. ~ 的用法* b1 I" a! d  p. v1 q4 [
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方/ P6 A2 `# G% ]( l$ m
    式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不0 j0 h) O' i! K! {
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。# ~: l( O  M$ y
      ~/image/about.bmp
    4 @' M" Z; l1 t- V是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更5 h# H; a& B8 l* T) A
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览
    ' ^1 M  Z/ ?$ {2 R# t; i6 x它。! u# M* \/ E, f/ @
      2. 在刷新和提交页面后,保存你的页面滚动条的位置
    1 P+ J) I0 J' H8 w0 v1 o  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说
    - o: h) i; l3 s$ n用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸
    0 L3 j7 }! K0 I8 A组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方9 [+ A2 d+ X% G0 T- G) `4 r/ k
    也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370
    # F1 h: k0 t" `2 k2 o- B% J个控件又需要他选择一下? 3 _4 w, j4 R9 z- _" ?
      用下面的方法可以很快地确定和记住你提交前的位置。- q! @* H+ ?5 b1 D
      网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,  |5 g2 z  C- e. i2 Y( |6 ^
    不过他使用了Web Behavior这意味着你需要使用一个.htc文件, g6 S0 q' \  T1 D7 @6 E+ I6 b
    Private Sub RetainScrollPosition()6 W9 N1 a9 c2 F8 B+ a
    Dim saveScrollPosition As New StringBuilder
    ! p; u" T( z( \- v3 [" ~5 R- F) x; PDim setScrollPosition As New StringBuilder
    " f1 _4 U4 }! d7 G9 L% ?+ T# pRegisterHiddenField("__SCROLLPOS", "0"): C+ R1 ]! `; h+ T' B
    saveScrollPosition.Append("<script language='javascript'>")
    ; T. {3 h- u- }) y) IsaveScrollPosition.Append("function saveScrollPosition() {"); m& G  c- \. l8 G7 G/ J4 U6 c
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")$ u: j% e9 a; E6 A3 Q. k: [8 t
    saveScrollPosition.Append("}"). P" p3 L3 r, a) m* i( j7 {# w
    saveScrollPosition.Append("document.body.onscroll=saveScrollPosition;"). H0 k; D% f" q
    saveScrollPosition.Append("</script>")* ?4 _6 o; t( S* }
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString()). u& }- O% _0 x  k7 K
    If (Page.IsPostBack = True) Then' v8 Q2 g: A& R  j- h0 K" h
    setScrollPosition.Append("<script language='javascript'>")  `' ?( }( S; r* q3 D2 m
    setScrollPosition.Append("function setScrollPosition() {")3 m) D! h2 ~* K4 b1 H$ C
    setScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")
    9 G$ Z* B9 p0 H& L# v& s: E, UsetScrollPosition.Append("}")7 U. x+ b5 W  O4 ^( W6 ?1 [
    setScrollPosition.Append("document.body.onload=setScrollPosition;")& \  {/ w, k4 U$ q5 S; {+ A
    setScrollPosition.Append("</script>")
    . Q6 Y" L; y+ d5 S8 }$ ZRegisterStartupScript("setScroll", setScrollPosition.ToString())' A* W% L6 j4 }, m- t' t
    End If
    9 @+ i+ ?: @  PEnd Sub
      n2 h- x- ]7 i  m+ QPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ' x3 P5 h) Q; k, M
    MyBase.Load  W0 _, e2 f: V  @$ J0 V
    RetainScrollPosition()
    9 K" @/ v1 j" yEnd Sub
    1 w; M. |/ L- I" g+ e4 m: m8 g: V7 P8 K% M( F( o% x% G9 X+ E
    3. DataList使用不同风格的模板
    * b- d  L0 V; @. n1 _  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条/ b" {0 R' o( t. [+ y
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    , p6 `( A4 f; X" j/ d元素或是加一个促销广告图等等。. S2 y! [/ s& {5 j4 v5 a
    Dim theme As String, x. p4 |5 _" b# g+ T- U
    theme = DropDownList1.SelectedValue  w1 N( R% D$ Y4 ~5 s" U# v
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    / q% K# [4 [* ]% r' p0 _9 \) ?( hDataList1.DataSource = DS
    * t* k% F4 h. D0 V) S" C: `DataList1.DataBind() ' @1 i3 f9 x! _/ n. k
          4. 设置服务器端控件的焦点" h1 c% E/ J7 v; f
    Private Sub SetFocus(ByVal controlToFocus As Control)2 R4 O; W, I) U/ F4 ~
    Dim scriptFunction As New StringBuilder
    : x0 |- {7 ~  `% j1 y) e/ nDim scriptClientId As String
    2 v1 a" n- k# d# L0 W9 ~* |9 wscriptClientId = controlToFocus.ClientID
    8 p0 a8 m; ]1 U9 K5 pscriptFunction.Append("<script language='javascript'>")2 G! B7 l' Q+ E
    scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
    0 `5 j4 B5 J+ f, J  G4 yscriptFunction.Append("</script>")$ H# V! H6 I" I. F/ ]7 v7 M
    RegisterStartupScript("focus", scriptFunction.ToString())/ e- B7 J; Q' k! K( m' }
    End Sub
    $ F) F, n/ o9 U* X5 ~Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    ( {9 b! a9 c3 I5 |6 {. b8 [MyBase.Load
    ; T: Q) O1 }# ~/ m9 D9 D! j  HIf (Page.IsPostBack = False) Then
    9 q, b3 a( F, ~. t) p1 C" t' \SetFocus(TextBox1)
    7 E: s3 H8 o$ o/ Q$ CEnd If' J0 L$ P; z; I! H0 @
    End Sub
    9 \, `, C1 f6 Q# q1 E4 V6 w  5. 滚动DataGrid
    - t( D/ W' A" I8 Z  这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只8 K9 i" M9 B# }" J0 K
    有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控, X/ v# b& }- S. o. _+ {6 z
    件放在一个DIV中将overflow属性设置成auto
    2 O( D8 R7 V8 C6 v<div style=“height:400px;width:200px;overflow:auto”>
    $ f% g, |$ Q$ }, V<asp:datagrid id=“MyGrid” runat=“server”/>1 u# W7 y8 K9 d! D
    </div> $ ~' j/ E  g/ f- Q7 W
      6. 动态创建控件4 r  k- @7 z; r3 j3 P& E( F( ^$ G
      利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    / \0 s" n: m( x" U& @Sub Page_Load()
    1 s0 A& U$ F5 c# t6 M# LDim i as Integer
    / g! q' X$ ^& C' w2 l% X# qFor i=0 to 4
    ; V% x4 [% T4 R, ?7 }: VDim myUserControl as Control
    + ^) p. M2 Y% r5 ]myUserControl = Page.LoadControl(“foo.ascx”)) m/ Z' n$ R5 X: ~
    PlaceHolder1.Controls.Add(myUserControl)
    . `( l4 I( c0 {( APlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    6 _3 k9 j7 \5 t# f# L, gNext i
    6 \: o  O6 X3 Z: ~& P6 Y' D9 g) ~( ZEnd Sub
    ! d0 d/ a/ l& r9 j  7. 客户端代码的使用+ d5 P* w% X( E* r$ v! y8 K2 w
      1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标7 @) _- ?4 G4 b1 o
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性$ N2 A# F  O* [: b8 R9 X7 ]
    asp:ImageButton id=“foo”
    , O, y! J$ v9 {& J$ ]; J% XImageUrl=“start.jpg”, ~, U# v3 n$ f# i3 C& K
    onMouseOver=“rollover(this);”
    $ a" s4 ~; _9 bonMouseOut=“rollout(this)”
    2 s- ?$ L: R' Y) p$ l( Mrolloversrc=“myrollover.jpg”  c% l$ M0 @- O. |5 a
    rolloutsrc=“myrollout.jpg”
    2 _8 `' ]. {+ j; O( F3 E" qrunat=“server”/>7 {* q4 N9 b0 t$ E
    <input type=Button onClick=“return clientHandler()” 1 V" m* e* t8 @4 h# P
    onServerClick=“Button1_Click” … />
    ; R  K. g; m4 I. b  g3 z$ B  2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所
    * {. a" h3 r! p/ T# a2 y有的客户端控件。  Q8 q4 i2 e8 G4 o
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles
    - }% F' Q0 f9 D+ v9 Q, kMyBase.Load( ]8 n* J$ L6 U5 H; o5 T
     RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    # J* n  ^2 A  G0 yEnd Sub
    4 x! e# K; e- Q3 S/ U/ c+ Z  3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-7-2 18:21

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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