• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

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

    來源:懂視網 責編:小OO 時間:2020-11-27 22:37:23
    文檔

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

    本文實例為大家分享了Asp.net單選、復選框控件的具體實現代碼,供大家參考,具體內容如下:將常用的jquery插件封裝成控件也是個不錯的選擇。先看看效果。1.新建類庫項目,創建數據源類。
    推薦度:
    導讀本文實例為大家分享了Asp.net單選、復選框控件的具體實現代碼,供大家參考,具體內容如下:將常用的jquery插件封裝成控件也是個不錯的選擇。先看看效果。1.新建類庫項目,創建數據源類。

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

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

    先看看效果:

    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.創建腳本或樣式文件,設置文件的屬性-生成操作-嵌入的資源

      

    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";

    效果圖:

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    本文實例為大家分享了Asp.net單選、復選框控件的具體實現代碼,供大家參考,具體內容如下:將常用的jquery插件封裝成控件也是個不錯的選擇。先看看效果。1.新建類庫項目,創建數據源類。
    推薦度:
    標簽: 自定義 插件 多選
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲精品国产福利一二区| 亚洲人成国产精品无码| 久久精品国产72国产精福利| 国产精品无码成人午夜电影| 久久e热在这里只有国产中文精品99 | 成人午夜精品久久久久久久小说 | 久久精品国产第一区二区| 日韩精品在线视频| 国产精品久久久亚洲| 午夜精品乱人伦小说区| 亚洲精品国产精品乱码不卡| 国产一区二区精品尤物| 2021国产精品视频网站| 国产精品毛片久久久久久久| 国产精品色内内在线播放| 亚洲精品高清无码视频| 综合在线视频精品专区| 亚欧无码精品无码有性视频| 欧美成人精品第一区二区三区| 精品成人一区二区三区四区| 国产成人精品免费大全| 久久久久99精品成人片牛牛影视| 久久最新精品国产| 青青青国产精品一区二区| 亚洲欧美精品丝袜一区二区| 91麻豆国产福利精品 | 国产亚洲精品成人a v小说| 国产精品亚洲一区二区在线观看| 3D动漫精品一区二区三区| 国产精品免费福利久久| 国产精品区免费视频| .精品久久久麻豆国产精品 | 亚洲欧美一级久久精品| 欧美日韩成人精品久久久免费看 | 国模和精品嫩模私拍视频| 日韩精品久久无码人妻中文字幕 | 国产精品VIDEOSSEX久久发布| 国产成人综合精品一区| 日韩精品在线观看视频| 51久久夜色精品国产| 国产精品午夜久久|