zoukankan      html  css  js  c++  java
  • ASP.NET动态增加控件 继承篇

    随着後面要讲得东西越来越深,這邊文章內容以及程式碼,也變得越來越多,因為這不是我原來的目的,
    所以我還是會盡量用淺顯易懂的方式來讓大家瞭解。

    继承的好处,这里不多说,主要是 示范,如何在 ASP.NET 来继承。


    一般常見的繼承是用來改寫ASP.NET 既有的控件,而我最常用不是這方面,而是用來規範網頁標準開發流程,另一方面是用來減少我的程式碼,上述兩方面最終目的,
    其實都是為了未來減少系統維護的困難度。

    規範標準流程,在多人共同開發上,尤顯其重要性,否則有維護過他人程式的人,都知道每各開發者,都有其風格,你光要瞭解每個人的風格就要花很多時間了,最麻煩的還是,每個人 開發風格,還會隨著他的成長 來變化,這等於你每接收一隻程式,不管是不是同一人,都要重新 瞭解一次開發風格,其中所需成本可想而知。

    在這邊程式中有使用 deal_Button_Click 這個函式,這就是一種開發流程的規範,因為我們基底程式已經寫好必要流程,後面要繼承的人,就只能照我們的基底流程來開發,如此一來,如此我們就可以 藉由這種方式,來強迫後面使用的人,一定要用這個方式來開發。

    而減少程式碼這個道理 也是顯而易見的,這個開發模式,就我本身長久經驗來看,在使用時,並不用想的太困難,尤其是想要一開始 就要想的很清楚,這都是很困難,反而造成使用這種開發模式的阻礙,我個人建議讀者在使用時,最簡單的方式,其實就是一直不斷的整裡手中的程式碼,把共通的部份集合起來,先能達成減少程式碼的目的就可以了,能減少程式碼,就能吸引其他開發人員一起使用,大家在一起不斷去討論、精進就可以了。

    上述的方式,當然只是用一個簡要的方式,讓讀者容易瞭解,在一般大案子中,還是需要資深人員,先規劃架構以及定義相關計畫,來進行開發的,這些都有很多很深奧的理論,在討論了,也不需要我在這來畫蛇添足。

    JS_Demo2Base.aspx.cs

     1 using System;
    2 using System.Data;
    3 using System.Collections;
    4 using System.Web.UI;
    5 using System.Web.UI.WebControls;
    6 using System.Web.UI.HtmlControls;
    7 using System.Text;
    8
    9 public class JSDemoBase : System.Web.UI.Page{
    10
    11 protected HtmlGenericControl sourceTag;
    12 protected Button _myBtn;
    13 protected TextBox _myTB;
    14
    15 protected override void OnInit(EventArgs e)
    16 {
    17 base.OnInit(e);
    18
    19 Label message = new Label();
    20 message.ID = "请输入你要说的话";
    21 sourceTag.Controls.Add(message);
    22
    23 _myTB = new TextBox();
    24 _myTB.ID = "input";
    25 //input.Text = val;
    26 sourceTag.Controls.Add(_myTB);
    27
    28 _myBtn = new Button();
    29 _myBtn.ID = "btnSayHello";
    30 _myBtn.Text = "SayHello";
    31 sourceTag.Controls.Add(_myBtn);
    32
    33 string val = Request.QueryString.Get("val");
    34 deal_Button_Click(val);
    35 }
    36
    37 public virtual void deal_Button_Click(string value)
    38 {
    39 }
    40
    41 public Button btnSayHello
    42 {
    43 get
    44 {
    45 return _myBtn;
    46 }
    47 }
    48 public TextBox input
    49 {
    50 get
    51 {
    52 return _myTB;
    53 }
    54 }
    55 }

    在写基底程式时,如有引用asp.net 上的 server 端控件,请记得要在程式一开始就要先定义(ID、Type 都要一致),如上述程式中的 sourceTag。这样一来就可以程式中来直接使用该控件,就像我们原来 asp.net 程式一般。

    JS_Demo2.aspx

     1 <%@ Page Language="C#" src="./JS_Demo2Base.aspx.cs" Inherits="JSDemoBase" %>
    2
    3 <script language="C#" runat="server">
    4
    5
    6 public override void deal_Button_Click(string value)
    7 {
    8 input.Text = value;
    9 if (value != "" && value != null)
    10 btnSayHello.Attributes.Add("OnClick", "return SetValue(" + input.ClientID + ");");
    11 else
    12 btnSayHello.Attributes.Add("OnClick", "return GetOtherValue(" + input.ClientID + ");");
    13 }
    14
    15 </script>
    16 <html>
    17 <head>
    18 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    19 </head>
    20 <body>
    21 <script type = "text/javascript">
    22 var myInput;
    23 function GetOtherValue(ctrl) {
    24 myInput = ctrl;
    25 var hWnd = window.open("JS_Demo.aspx?val=" + ctrl.value, "_blank" );
    26 if ((document.window != null) && (!hWnd.opener))
    27 hWnd.opener = document.window;
    28 return false;
    29 }
    30 function SetValue(ctrl) {
    31 window.opener.myInput.value = "Re: " + ctrl.value;
    32 return false;
    33 }
    34 </script>
    35 <form runat="server">
    36
    37 <h3>动态增加控件 继承篇</h3>
    38
    39 <p/>
    40 <div id="sourceTag" runat="server">
    41 </div>
    42 <p/>
    43 一条小龙
    44 </form>
    45 </body>
    46 </html>


    一條小龍

  • 相关阅读:
    Markdown学习笔记
    Go 学习笔记(一)
    case中定义变量
    <转>MySql 与Oracle区别
    Java 时间转换问题总结
    线程之间共享
    并发编程快速入门
    redis主从复制
    jedis操作redis
    redis持久化方案
  • 原文地址:https://www.cnblogs.com/babydragoner/p/2266392.html
Copyright © 2011-2022 走看看