自訂阿ASP.NET CheckBox的設計思路

來源:互聯網
上載者:User
asp.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");
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.