中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Asp.net自定義控件中單選、多選控件的示例分析

發布時間:2021-09-16 17:03:15 來源:億速云 閱讀:138 作者:小新 欄目:開發技術

小編給大家分享一下Asp.net自定義控件中單選、多選控件的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

具體內容如下

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

先看看效果:

Asp.net自定義控件中單選、多選控件的示例分析

1.新建類庫項目,創建數據源類

 [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.創建控件類CheckList,繼承與WebControl,并定義 public List<Select2Item> Items數據項屬性。

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

  Asp.net自定義控件中單選、多選控件的示例分析

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

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

 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,根據你的控件而定。 

 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方法,返回List<Select2Item>,添加GetSelectValue,返回String(多選以,號隔開)       

 public List<Select2Item> 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.保存狀態
 你需要重寫兩個方法protected override object SaveViewState() 、protected override void LoadViewState(object savedState),旨在將Items數據項屬性保存到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 = (List<Select2Item>)vState[1];
 }

7.單選和復選的設置,在js中控制
 添加屬性 
[Description("獲取和設置多選"), DefaultValue(true), Browsable(true), Category("雜項")]
public bool Multiple { get; set; }
 在OnPreRender代碼中你會發現Multiple屬性會影響div的mul屬性值,從而判斷是否多選(默認多選)
 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";

效果圖:

Asp.net自定義控件中單選、多選控件的示例分析

看完了這篇文章,相信你對“Asp.net自定義控件中單選、多選控件的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂州市| 门源| 冷水江市| 武义县| 当涂县| 武夷山市| 二连浩特市| 吉木萨尔县| 白朗县| 巫山县| 广宁县| 浮山县| 南部县| 高平市| 江津市| 台湾省| 安达市| 平原县| 紫云| 四平市| 武鸣县| 梅州市| 丹凤县| 安国市| 赞皇县| 青浦区| 女性| 桑日县| 柞水县| 邓州市| 定远县| 洞头县| 富蕴县| 富民县| 湖北省| 龙游县| 水富县| 昌邑市| 林甸县| 汕尾市| 额敏县|