熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 10:28:54  來源: .NET編程 
    有人要問你瘋了吧checkbox控件還用寫你重寫嗎?沒辦法最近做一個項目寫開發模板的時候需要這樣做!我的模板需要在前台用javascript控制控件的值和狀態初始化需要很多特殊的html attribute記錄一些控制參數但是ms提供的控件沒有這些屬性因此連checkbox都要自己做了!我的checkbox的需求是
  
    : 包含所有的ms checkbox屬性方法和事件
  
    : 此外要對自己定義的checkbox加上enableflagwitowner等自定義屬性
  
    問題和解決思路如下
  
    問題: 如果直接繼承ms的checkbox 使用thisattributesadd(witownertrue) 語句給控件添加自定義屬性屬性會添加到控件產生的<span>上checkbox上沒有加上這個屬性在前台無法用javascript獲取該屬性來控制checkbox
  
    解決思路:如果繼承webcontrol然後覆蓋render方法在render的時候用類似chkcheckboxrendercontrol(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(thistextalign==textalignright)
   {
    chkcheckboxid=thisclientid+_checkbox;
  
    chkcheckboxrendercontrol(writer);
   
    writerwrite(<label for=+chkcheckboxid+>+thistext+</label>);
   }
   else
   {
    writerwrite(<label for=+chkcheckboxid+>+thistext+</label>);
    chkcheckboxid=thisclientid+_checkbox;
    chkcheckboxrendercontrol(writer);
   }
  }
  
  private void setgroupattributes()
  {
   //所有的cswit控件都需要帶有這個屬性
   chkcheckboxattributesadd(witownertrue);
  }

From:http://tw.wingwit.com/Article/program/net/201311/13784.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.