程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> asp.net控件開發技巧(1)使用HtmlTextWriter類規范輸出標簽

asp.net控件開發技巧(1)使用HtmlTextWriter類規范輸出標簽

編輯:關於ASP.NET

使用HtmlTextWriter類規范輸出標簽

1.盡量使用內置的方法輸出標簽

寫過控件的人沒有人會說沒用過Render和RenderContents方法,其中關鍵的類就是用HtmlTextWriter類的一些方法把html標簽呈現出來,但其寫法不同,效果卻相同。如輸出一個下拉框:

public class DemoControl : Control
  {
    protected override void Render(HtmlTextWriter writer)
    {
      //1.以輸出字符串形式輸出html
      /**//*
      writer.Write("<select>");
      writer.Write("<option value='0'>asp.net</option>");
      writer.Write("<option value='1'>asp.net ajax</option>");
      writer.Write("</select>");
      */

      //2.用.net內置推薦的方法輸出html
      writer.RenderBeginTag(HtmlTextWriterTag.Select);
      writer.AddAttribute(HtmlTextWriterAttribute.Value, "0");
      writer.RenderBeginTag(HtmlTextWriterTag.Option);
      writer.Write("asp.net");
      writer.RenderEndTag();
      writer.AddAttribute(HtmlTextWriterAttribute.Value, "1");
      writer.RenderBeginTag(HtmlTextWriterTag.Option);
      writer.Write("asp.net ajax");
      writer.RenderEndTag();
    }
  }

當你熟悉這些方法後,請盡量使用這些方法

2.分段呈現標簽

此方法等於為重構,當標簽呈現的比較多,請不要一步到底的寫下來,分部把需要的東西寫在各個方法裡面再組合,

如的示例三,說實話的,雖然用HtmlTextWriter的函數輸出標簽,但還不如直接輸出字符串來的明白,一大堆的RenderBeginTag和RenderEndTag方法。請分段呈現標簽,分拆函數。然後以Render開頭的函數命名,這樣看起來就清晰多了。

protected override void Render(HtmlTextWriter writer)
   {
     RenderTable(writer);
   }

   private void RenderTable(HtmlTextWriter writer)
   {
     writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "0");
     writer.RenderBeginTag(HtmlTextWriterTag.Table);
     RnderPaymentMethod(writer);
     RenderCreditCardNo(writer);
     RenderCardholderName(writer);
     RenderExpirationDate(writer);
     RenderSubmitButton(writer);
     writer.RenderEndTag();
   }

3.規范標簽ID命名

不要把控件的頭標簽把ID名字定死,防止名字重疊,可以把Control的UniqueID屬性賦給ID屬性,子標簽也一樣。可以以父標簽的id為前綴,然後再加以命名。另外的好處就是可以跟前端交互,靈活性增強。

//writer.AddAttribute(HtmlTextWriterAttribute.Id, "select1");
      writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID);
      writer.RenderBeginTag(HtmlTextWriterTag.Select);
      //以父標簽的id為前綴
      writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID+"_asp");
      writer.RenderBeginTag(HtmlTextWriterTag.Option);
      writer.Write("asp.net");
      writer.RenderEndTag();
      writer.RenderEndTag();

4.判斷輸出動態屬性

如TextBox的Text屬性,當其屬性未設置時,呈現出來的標簽value屬性不呈現,即後端要判斷,不然則要呈現value=""這項工作比較繁瑣。

string text = this.Text;
      if (text.Length > 0)
      {
        writer.AddAttribute(HtmlTextWriterAttribute.Value, text);
      }

暫時就這些,想到再補充。不想把別的寫進去。以後分開寫。大家想到再補充。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved