设为首页

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

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

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

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

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

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2009-10-16 01:25:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基 本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需
    7 ^, }/ x7 i; V8 I9 v求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。7 A& I9 [# f0 B+ \
      1. ~ 的用法" S; d2 |8 P; w
      一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方
    % ^% J0 L7 {# m1 B( _  O式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不7 J; d% r) P8 V% L) p0 i/ e) \
    同层次的两个目录的aspx文件分别引用时,问题就会出现了。
    8 a8 U9 x' J4 y* m  ~/image/about.bmp
      t5 o/ H( _6 {% b7 o是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更/ z4 Y% \. d7 c  [  B' z+ p
    加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览+ @/ D+ \; l2 Y  I5 w
    它。
    1 K) E* |* u) `- e! L4 P  B" f( z  2. 在刷新和提交页面后,保存你的页面滚动条的位置
    * Z6 j* i8 _3 `1 t. I  h8 B) i  经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说; U0 l! S- a' l) w0 h8 Z: `
    用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸+ k3 c9 h$ o8 t) r5 Y, M. X
    组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方
    ' j0 }# @0 y9 U0 v5 p) G* G8 S; t也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370& r' g( u' D/ [" S
    个控件又需要他选择一下? + B* @! r, ]0 v. J6 s9 M6 K
      用下面的方法可以很快地确定和记住你提交前的位置。
    3 n0 H  b" t, |* o  网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,
    & U. ~, s9 F9 Y2 n不过他使用了Web Behavior这意味着你需要使用一个.htc文件. o; b  r0 d- ]4 K+ y) O6 G1 m
    Private Sub RetainScrollPosition()
    8 a: L& [! M2 W; n* hDim saveScrollPosition As New StringBuilder
    4 ]7 w: ?+ S5 n4 v# ^7 ?6 oDim setScrollPosition As New StringBuilder
    3 {# o6 e1 p, M7 ORegisterHiddenField("__SCROLLPOS", "0")9 u) b! Q7 d6 Q' M4 T
    saveScrollPosition.Append("<script language='javascript'>")
    $ B/ q6 |" o! i3 }saveScrollPosition.Append("function saveScrollPosition() {")& |& o7 ^5 k) K4 n9 W% R
    saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = document.body.scrollTop;")
    - D. v0 Z& d! J1 |' isaveScrollPosition.Append("}")
      T4 u6 K; r1 [& }0 G% asaveScrollPosition.Append("document.body.onscroll=saveScrollPosition;")
    ' P3 P; u6 B1 [3 P: r9 E( ?saveScrollPosition.Append("</script>"): }0 |  n) Q5 C' J0 G; O
    RegisterStartupScript("saveScroll", saveScrollPosition.ToString())
    ; m5 C7 b& B$ [6 L9 f& RIf (Page.IsPostBack = True) Then+ ?( E/ B- u4 F' U
    setScrollPosition.Append("<script language='javascript'>")  T# A) @+ @0 n+ H0 w1 k
    setScrollPosition.Append("function setScrollPosition() {")
    2 [% W& ~! H! Y1 z! y; ksetScrollPosition.Append(" document.body.scrollTop = " & Request("__SCROLLPOS") & ";")8 E* b$ E; j4 r( x' _, A
    setScrollPosition.Append("}")! Y, c4 D! Q. M/ V
    setScrollPosition.Append("document.body.onload=setScrollPosition;")
    8 C$ s4 ?6 V6 s5 j% W  zsetScrollPosition.Append("</script>")3 W7 U, R( ^' m
    RegisterStartupScript("setScroll", setScrollPosition.ToString())
    1 V$ k  ^, _4 V) E" a7 lEnd If5 h! O1 ~1 @& i- o$ S* i. I- Z
    End Sub  ^$ U1 E3 i6 n1 ^# {+ ^
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ) ~( Z4 ~  Z7 g9 f
    MyBase.Load
    , H# U3 i3 q( u1 q0 hRetainScrollPosition()
      n* T% \! N6 ]$ w; H- s0 AEnd Sub ; X4 Z" w2 |$ ]/ s9 U% h

    / u1 t$ d: V5 Y2 y( A- d3. DataList使用不同风格的模板
    : S$ N% i, S9 G' F  这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条1 ?7 Y2 J$ s. C3 e( H
    件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个
    $ F6 D% E4 X* m* b) h8 [8 L( ?元素或是加一个促销广告图等等。
    : k$ a( ^9 f; D7 I9 I6 U& ]% u) oDim theme As String6 X! p5 d4 i3 p/ ]6 z
    theme = DropDownList1.SelectedValue- K/ W. _! Y& q9 W: m
    DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
    & q* _, y. {3 ODataList1.DataSource = DS# G- F1 ]4 V3 B- X. Q
    DataList1.DataBind()
    4 ^* v5 ?; r  [; Z/ [3 h      4. 设置服务器端控件的焦点+ R; m& i( b5 L, K- R+ s0 U
    Private Sub SetFocus(ByVal controlToFocus As Control)- Q4 t9 f3 d5 k, V0 Y
    Dim scriptFunction As New StringBuilder% F8 t) ^. ]# i6 R8 S/ w9 c8 B; @
    Dim scriptClientId As String+ O& R- t- D9 Z  f2 I# R+ j. z
    scriptClientId = controlToFocus.ClientID
    + `, S$ k/ y+ k/ P# U  ZscriptFunction.Append("<script language='javascript'>")
    / Z: i9 V9 J; r* j/ RscriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")& w3 j4 s3 R' D
    scriptFunction.Append("</script>")
    8 \# z& y8 x0 J& A) E2 ]/ A7 VRegisterStartupScript("focus", scriptFunction.ToString())* e9 Q& Z/ [& @6 C9 D
    End Sub
    " A$ s7 R) C; g& \  APrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles   ~! G+ l, V/ g; Y! c3 H) x
    MyBase.Load. J  D$ V" Z& l* j# m2 u0 G# @# k
    If (Page.IsPostBack = False) Then
    / e3 W! _# o5 I: a4 y2 rSetFocus(TextBox1)5 R% B0 w! T5 S3 Y2 V* E
    End If
    ( J' r: A% ^- o6 aEnd Sub
    4 T0 D9 s# O  e8 v! b1 o  5. 滚动DataGrid- Q9 [% x/ F7 L+ Y$ m/ k
      这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只
    ) m6 Z4 e9 R! ?9 q% `9 j0 N有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控
    ! W8 E( L& O0 k% {/ s& w& F9 k1 L; F件放在一个DIV中将overflow属性设置成auto/ b. x. C0 r! D! L) N
    <div style=“height:400px;width:200px;overflow:auto”>
    2 L6 Z6 @: `/ T, {+ N2 G, ]3 J: T<asp:datagrid id=“MyGrid” runat=“server”/>; Z7 Q, B4 V, O5 h5 \8 {% q
    </div>
    . d1 v  x' K6 y9 H, I/ k  6. 动态创建控件
    ; R3 l: C3 R3 B1 b( }0 y* G  利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。
    / H4 R" d7 c* w; y1 }Sub Page_Load()
    ; s# R& T: _& J7 L3 eDim i as Integer
    . M6 s) l: w( o- J4 gFor i=0 to 4
    ; @8 {1 {. m* R3 I9 E: oDim myUserControl as Control
    * q3 S' g' q) d3 y+ {7 d$ c5 E1 b5 h6 ]4 NmyUserControl = Page.LoadControl(“foo.ascx”)
    2 |! z+ J2 s# x. p0 I) w; hPlaceHolder1.Controls.Add(myUserControl)
    ) Y" t# {/ d' w4 |0 ^: I$ VPlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
    ! C- L6 }+ E, F8 aNext i
    5 x/ e. A9 X. x0 W1 ^8 `End Sub
    9 ]0 A2 q/ I" Z8 c  7. 客户端代码的使用
    5 l9 Z7 I1 t# o9 q* j  1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标/ T: T. ^% p5 `4 T4 b/ J
    准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性$ z9 ~( f# ^# w1 u
    asp:ImageButton id=“foo” 0 P) f+ t) x% J* z  t3 Y6 K
    ImageUrl=“start.jpg”
    $ ~. G( |& ]% B4 z5 q  t8 J4 {onMouseOver=“rollover(this);”
    6 B. {  A# T; ?onMouseOut=“rollout(this)”
    $ P9 y  W. r( O) H" L% V* xrolloversrc=“myrollover.jpg”
    1 Q1 Q9 O5 c# R: C4 {rolloutsrc=“myrollout.jpg”
    ' j: L0 x7 X: `  p. y6 Rrunat=“server”/>
    # {$ ?+ ^& q4 v: X; |9 v) s<input type=Button onClick=“return clientHandler()”
    - R5 w) e& c/ A9 u! p7 E  R* zonServerClick=“Button1_Click” … /> 5 D) w9 f- d& S* P: c
      2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所# m# B, ^7 h; U* Y# c& ~/ {
    有的客户端控件。7 E9 Q' v. V! R1 X
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles 1 c$ u8 s/ M" ], c" `8 e
    MyBase.Load
    " [" k  T! w1 n( Q2 L: { RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
    . E9 {% b" g% uEnd Sub 6 Q) u. m+ {+ a
      3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术
    常上飞翔,梦想飞扬!经贸是我家,建设靠大家~ 人们都说:不在大学论坛里灌过水的大学都像是没读过大学~
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-11-23 07:21

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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