程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 自定義ASP.NET CheckBox的設計思路

自定義ASP.NET CheckBox的設計思路

編輯:.NET實例教程
     有人要問,你瘋了吧,checkbox控件還用寫你重寫嗎?沒辦法,最近做一個ASP.Net項目,寫開發模板的時候,需要這樣做!我的模板需要在前台用Javascript控制控件的值和狀態初始化,需要很多特殊的Html attribute,記錄一些控制參數,但是ms提供的控件沒有這些屬性,因此連checkbox都要自己做了!我的checkbox的需求是:
  
    1: 包含所有的ms checkbox屬性方法和事件
  
    2: 此外,要對自己定義的checkbox加上enableflag,witowner等自定義屬性
  
    問題和解決思路如下:
  
    問題: 如果直接繼承ms的checkbox, 使用this.attributes.add("witowner","true") 語句給控件添加自定義屬性,屬性會添加到控件產生的<span>上,checkbox上沒有加上這個屬性,在前台無法用Javascript獲取該屬性,來控制checkbox.
  
    解決思路:如果繼承webcontrol,然後覆蓋render方法,在render的時候,用類似chkcheckbox.rendercontrol(writer); 的語句添加Htmlinputcheckbox,再加一個文字label,應該可以用符合控件的方式模擬出ms checkbox,並且帶自己定義屬性的功能。但是,這個時候出現的問題是:無法把控件放到<span></span>中,設置控件背景顏色等屬性,無法針對控件生效! 解決辦法:
  
    為了滿足以上需求,控件繼承webcontrol, 覆蓋rendercontents,語法如下
  
  /// <summary>
  /// 繪制控件的內容,即:繪制span包含的部分,在rendercontents函數裡面寫
  /// 子控件的render,可以讓復合控件的span包含子控件,便於寫前台script操作。
  /// </summary>
  /// <param name="writer"></param>
  protected override void rendercontents(Htmltextwriter writer)
  {
   setgroupattributes();
  
   if(this.textalign==textalign.right)
   {
    chkcheckbox.id=this.clIEntid+"_checkbox";
  
    chkcheckbox.rendercontrol(writer);
   
    writer.write("<label for='"+chkcheckbox.id+"'>"+this.text+"</label>");
   }
   else
   {
    writer.write("<label for='"+chkcheckbox.id+"'>"+this.text+"</label>");
    chkcheckbox.id=this.clIEntid+"_checkbox";
    chkcheckbox.rendercontrol(writer);
   }
  }
  
  private void setgroupattributes()
  {
   //所有的cswit控件都需要帶有這個屬性
   chkcheckbox.attributes.add("witowner","true");
  } 
   
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved