一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.net自定義控件之單選、多選控件

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

2020-01-15 13:32波谷 ASP.NET教程

這篇文章主要為大家詳細介紹了Asp.net自定義控件之單選、多選控件的相關資料,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Asp.net單選、復選框控件的具體實現代碼,供大家參考,具體內容如下

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

先看看效果:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[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>標簽。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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,根據你的控件而定。 

?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    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 csharp" id="highlighter_501053">
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    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;
     }
    }
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    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 

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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自定義控件之單選、多選控件

    以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

    延伸 · 閱讀

    精彩推薦
    主站蜘蛛池模板: 日本免费全黄一级裸片视频 | 亚洲精品免费观看 | 91色爱| 女人被爽到呻吟娇喘的视频动态图 | 黑帮少爷爱上我第8集在线观看 | 天天干天天色综合 | 欧美成人免费tv在线播放 | 色婷亚洲| 色婷婷在线播放 | 国产一区二区视频在线 | 日韩欧美一区二区三区视频 | www.av在线免费观看 | 护士videossexo另类 | 俄罗斯一级在线播放 | 2022色婷婷综合久久久 | 亚洲免费网站在线观看 | 亚洲国产一区二区三区a毛片 | 日本艳鉧动漫1~6完整版在 | 506070老熟肥妇bbwxx视频 500第一精品 | 欧美精品一区二区在线观看 | ysl千人千色t9t9t9t9 | 四虎影院免费视频 | 亚洲欧美天堂综合久久 | 欧美va免费大片 | 国产在线激情视频 | 国产精品四虎在线观看免费 | 1024免费福利永久观看网站 | 亚洲高清国产拍精品影院 | 国士李风起全文在线阅读 | 暖暖免费高清完整版观看日本 | 国产成人精品三级在线 | 久久国产视频网 | 色妞女女女女女bbbb | 天天色综合6 | 青青青视频蜜桃一区二区 | 精品精品精品 | 色婷婷精品| 4hu影院永久在线播放 | 欧美日韩国产中文字幕 | 精品网站 | 色妞视频一级毛片 |
      <button id="wjzhl"><option id="wjzhl"></option></button>
          1. <output id="wjzhl"><option id="wjzhl"></option></output>
            <ol id="wjzhl"></ol>