主頁 > 知識庫 > Asp.net自定義控件之單選、多選控件

Asp.net自定義控件之單選、多選控件

熱門標(biāo)簽:蘇州如何辦理400電話 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 臨沂智能電話機(jī)器人加盟 400電話辦理怎么樣 百應(yīng)電話機(jī)器人外呼系統(tǒng) 西寧呼叫中心外呼系統(tǒng)線路商 地圖標(biāo)注軟件免費(fèi)下載 聯(lián)通官網(wǎng)400電話辦理 外呼電話機(jī)器人成本

本文實(shí)例為大家分享了Asp.net單選、復(fù)選框控件的具體實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下

將常用的jquery插件封裝成控件也是個不錯的選擇。

先看看效果:

1.新建類庫項目,創(chuàng)建數(shù)據(jù)源類

 [Serializable]
 public class Select2Item
 {
 public bool Selected { get; set; }

 public string Text { get; set; }

 public string Value { get; set; }

 public Select2Item() { }

 public Select2Item(string text, string value)
 {
  this.Text = text;
  this.Value = value;
 }

 public Select2Item(string text, string value, bool selected)
 {
  this.Text = text;
  this.Value = value;
  this.Selected = selected;
 }
 } 

2.創(chuàng)建控件類CheckList,繼承與WebControl,并定義 public ListSelect2Item> Items數(shù)據(jù)項屬性。

3.引入腳本文件及樣式文件 
a.創(chuàng)建腳本或樣式文件,設(shè)置文件的屬性-生成操作-嵌入的資源

  

b.需要在namespace上添加標(biāo)記 [assembly: WebResource("命名空間.文件夾名.文件名", "mime類型")]
如:
    [assembly: WebResource("Control.Style.checklist.css", "text/css",PerformSubstitution = true)]
    [assembly: WebResource("Control.Scripts.checklist.js", "application/x-javascript")]
 

 如果css文件里面存在圖片的話,同樣將圖片設(shè)置為嵌入的資源,在css中的寫法為%=WebResource("命名空間.文件夾名.文件名")%> 
 PerformSubstitution 表示嵌入式資源的處理過程中是否分析其他Web 資源 URL,并用到該資源的完整路徑替換。
c.重寫protected override void OnPreRender(EventArgs e),引入嵌入的腳本或樣式文件
 if(Page!=null) Page.Header.Controls.Add(LiteralControl),將script>link>標(biāo)簽放到LiteralControl中,然后將LiteralControl添加到Page.Header中,最后在頁面里你就會看到引入的script>link>標(biāo)簽。

 protected override void OnPreRender(EventArgs e)
 {
  if (this.Page != null)
  {
  StringBuilder sbb = new StringBuilder();
  sbb.Append(string.Format(STYLE_TEMPLATE, Page.ClientScript.GetWebResourceUrl(this.GetType(), "HandControl.Style.checklist.css")));
  sbb.Append(string.Format(SCRIPT_TEMPLATE, Page.ClientScript.GetWebResourceUrl(this.GetType(), "HandControl.Scripts.checklist.js")));

  bool hascss = false;
  LiteralControl lcc = new LiteralControl(sbb.ToString());
  lcc.ID = "lccheck";
  foreach (Control item in Page.Header.Controls)
  {
   if (item.ID == "lccheck")
   hascss = true;
  }
  if (!hascss)
   Page.Header.Controls.Add(lcc);
  }
  base.OnPreRender(e);
 } 

4.重寫控件的protected override void Render(HtmlTextWriter writer)方法
這里主要是渲染控件的html,根據(jù)你的控件而定。 

 protected override void Render(HtmlTextWriter writer)
 {
  if (Items.Count > 0)
  {
  writer.Write("div id='div" + this.ClientID + "' class='c01-tag-div' mul='" + (Multiple == true ? "1" : "0") + "'>");
  if (Multiple == false)
   writer.Write("input name='tb" + this.ClientID + "' type='hidden' value='" + Items[0].Value + "' />");
  else
   writer.Write("input name='tb" + this.ClientID + "' type='hidden' />");
  bool first = true;
  foreach (var item in Items)
  {
   if (Multiple == false)
   {
   if (item.Selected  first)
   {
    writer.Write("a title='" + item.Text + "' class='c01-tag-item c01-tag-select' val='" + item.Value + "' tag='Y'>" + item.Text + "/a>");
    first = false;
   }
   else
   {
    writer.Write("a title='" + item.Text + "' class='c01-tag-item' val='" + item.Value + "' tag='N'>" + item.Text + "/a>");
   }
   }
   else
   {
   if (item.Selected)
    writer.Write("a title='" + item.Text + "' class='c01-tag-item c01-tag-select' val='" + item.Value + "' tag='Y'>" + item.Text + "/a>");
   else
    writer.Write("a title='" + item.Text + "' class='c01-tag-item' val='" + item.Value + "' tag='N'>" + item.Text + "/a>");
   }
  }
  writer.Write("/div>");
  }
 } 

5.添加GetSelected方法,返回ListSelect2Item>,添加GetSelectValue,返回String(多選以,號隔開)       

 public ListSelect2Item> GetSelected()
 {
  if (Page != null)
  {
  var values = Page.Request.Form["tb" + this.ClientID].Split(',');
  var res = Items.Where(t => values.Contains(t.Value)).ToList();
  foreach (var item in Items)
  {
   if (res.Contains(item))
   {
   item.Selected = true;
   }
   else
   {
   item.Selected = false;
   }
  }
  return res;
  }
  else
  {
  return null;
  }
 } 
 public string GetSelectValue()
 {
  if (Page != null)
  {
  return Page.Request.Form["tb" + this.ClientID];
  }
  return "";
 } 

6.保存狀態(tài)
 你需要重寫兩個方法protected override object SaveViewState() 、protected override void LoadViewState(object savedState),旨在將Items數(shù)據(jù)項屬性保存到ViewState 

 protected override object SaveViewState()
 {
  var valuestr = Page.Request.Form["tb" + this.ClientID];
  if (!string.IsNullOrEmpty(valuestr))
  {
  var values = valuestr.Split(',');
  var temp = Items.Where(t => values.Contains(t.Value)).ToList();
  foreach (var item in temp)
  {
   item.Selected = true;
  }
  }
  return new object[] { base.SaveViewState(), Items };
 }

 protected override void LoadViewState(object savedState)
 {
  object[] vState = (object[])savedState;
  if (vState[0] != null)
  base.LoadViewState(vState[0]);
  if (vState[1] != null)
  Items = (ListSelect2Item>)vState[1];
 } 

7.單選和復(fù)選的設(shè)置,在js中控制
 添加屬性 
[Description("獲取和設(shè)置多選"), DefaultValue(true), Browsable(true), Category("雜項")]
public bool Multiple { get; set; }
 在OnPreRender代碼中你會發(fā)現(xiàn)Multiple屬性會影響div的mul屬性值,從而判斷是否多選(默認(rèn)多選)
 8.其它說明
private static readonly string STYLE_TEMPLATE = "link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />\r\n";
 private static readonly string SCRIPT_TEMPLATE = "script type=\"text/javascript\" src=\"{0}\">/script>\r\n";

效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • asp.net自定義控件代碼學(xué)習(xí)筆記
  • asp.net 自定義控件實(shí)現(xiàn)無刷新上傳圖片,立即顯示縮略圖,保存圖片縮略圖
  • Asp.net 動態(tài)加載用戶自定義控件,并轉(zhuǎn)換成HTML代碼
  • asp.net DropDownList自定義控件,讓你的分類更清晰
  • 關(guān)于asp.net 自定義分頁控件
  • ASP.NET單選按鈕控件RadioButton常用屬性和方法介紹
  • 淺談ASP.NET中最簡單的自定義控件
  • ASP.NET中 CheckBox復(fù)選框控件的使用
  • ASP.NET中CheckBoxList復(fù)選框列表控件詳細(xì)使用方法
  • ASP.NET中 RadioButtonList 單選按鈕組控件的使用方法

標(biāo)簽:聊城 中衛(wèi) 海西 慶陽 臨夏 清遠(yuǎn) 甘肅

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Asp.net自定義控件之單選、多選控件》,本文關(guān)鍵詞  Asp.net,自定義,控件,之,單選,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Asp.net自定義控件之單選、多選控件》相關(guān)的同類信息!
  • 本頁收集關(guān)于Asp.net自定義控件之單選、多選控件的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章