• 自己开发asp.net服务器控件(1)-简单的属性声明


    先来小试牛刀,试一个HyperLink控件,不过默认显示文字为:“Socan信息港”,链接到:“http://ww.socan.com.cn”
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.ComponentModel;
    using System.Web.UI;

    namespace WebControlsByLyj
    {
           [DefaultProperty(
    "Text")]
           [ToolboxData(
    "<{0}:HyperLink runat=server></{0}:HyperLink>")]
           
    public class HyperLink : System.Web.UI.Control
           
    {
               [Description(
    "要显示的链接名")]
               [DefaultValue(
    "Socan信息港")]
               [Category(
    "Appearance")]
               [Bindable(
    true)]
               
    public string Text
               
    {
                   
    get
                   
    {
                       
    string s = (string)ViewState["Text"];
                       
    return (s == null? "Socan信息港" : s;
                   }

                   
    set
                   
    {
                       ViewState[
    "Text"= value;
                   }

               }


               [Description(
    "要链接到的地址")]
               [DefaultValue(
    "http://www.socan.com.cn")]
               [Category(
    "Data")]
               [Bindable(
    true)]
               
    public string Link
               
    {
                   
    get
                   
    {
                       
    string s = (string)ViewState["Link"];
                       
    return (s == null? "http://www.socan.com.cn" : s;
                   }

                   
    set
                   
    {
                       ViewState[
    "Link"= value;
                   }

               }


               
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
               
    {
                
    //这是好的方式
                   writer.AddAttribute("href", Link);
                   writer.AddAttribute(
    "target""_blank");
                   writer.AddStyleAttribute(
    "color""red");
                   writer.RenderBeginTag(
    "a");
                   writer.Write(Text);
                   writer.RenderEndTag();
                
    //这是不好的方式
                   
    //writer.Write("<a href='http://www.126.com' style='color:red'>" + Name + "</a>");
               }

           }

    }

    此控件虽然是有界面的控件,但我没有从WebControl继承,而是直接由Control继承,因为比较简单,当然,如果比较复杂一点的一般从WebControl继承。

    1、新建一个项目时,如果是类库,需要引用System.Web,最好加上:
    using System.ComponentModel;
    using System.Web.UI;

    2、这是对控件的描述信息:
           [DefaultProperty("Text")]
           [ToolboxData("<{0}:HyperLink runat=server></{0}:HyperLink>")]
    第一句说明查看控件属性时默认到Text属性,第二句说明从控件栏拖动一个时自动产生的代码。

    3、这是对控件属性Text的描述信息:
               [Description("要显示的链接名")]
               [DefaultValue("Socan信息港")]
               [Category("Appearance")]
               [Bindable(true)]
    属性: • Bindable — 属性可绑定 到数据源。您可以将 Email 字段链接到数据库、XML 文件或任何其他 DataSet。该特性强制 Visual Studio 在控件的可绑定属性列表中显示 Email 属性。
     
    • Appearance —属性将显示在 Appearance 类别下的属性视图中。您可以选择想要的任何类别,包括默认类别:Appearance、Accessibility、Behavior、Data、Layout 或 Misc。只要用户选择了属性的类别组织方法,属性将会显示在 Appearance 下。
     
    • DefaultValue — 属性具有一个空的默认值。尽管空值对于 Email 字段来说有意义,但对于您添加到控件中的其他属性可能并不合适。当用户将您的控件放到他们的 Web 页上时,选择适当的默认值可为用户免去不计其数的单击操作。
     
    • Description — 属性说明显示在控件列表下,并且也可能作为工具提示出现。Email 属性将具有说明。
     
    • Localizable — 它会用发送信号的方式通知 ASP.NET 2.0 Framework 该控件包括可以针对不同语言或位置进行配置的文本属性。

    看明白上面这些,第二属性的描述也不用介绍了吧

    4、 (string)ViewState["Text"];
    这句本不想说明,不过在做的时候,我犯了个尚可原谅的错误,我使用了.ToString(),但是出错了,因为当ViewState["Text"]为Null的时候会出现异常,而现在这样就不会,s依然是Null值。

    5、在输出的时候,两种方法都可实现:
                //这是好的方式
                   writer.AddAttribute("href", Link);
                   writer.AddAttribute("target", "_blank");
                   writer.AddStyleAttribute("color", "red");
                   writer.RenderBeginTag("a");
                   writer.Write(Text);
                   writer.RenderEndTag();
                //这是不好的方式
                   //writer.Write("<a href='http://www.126.com' style='color:red'>" + Name + "</a>");
    通常采用上面的方式,好处有两点,一是提供实用方法和枚举减少出错的可能性,二是可依据发出请求的浏览器的版本呈现适当的内容。
     


    再来一个有点实用价值的:拖入一个控件,想要弹出消息,只要给它赋一个Text值即可!很实用吧!

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace WebControlsByLyj
    {
          [DefaultProperty(
    "Text")]
          [ToolboxData(
    "<{0}:Alert runat=server></{0}:Alert>")]
          
    public class Alert : WebControl
          
    {
              [Bindable(
    true)]
              [Category(
    "Appearance")]
              [DefaultValue(
    "")]
              [Localizable(
    true)]
              
    public string Text
              
    {
                  
    get
                  
    {
                      String s 
    = (String)ViewState["Text"];
                      
    return ((s == null? String.Empty : s);
                  }


                  
    set
                  
    {
                      ViewState[
    "Text"= value;
                  }

              }


              
    protected override void RenderContents(HtmlTextWriter output)
              
    {
                  
    if (!string.IsNullOrEmpty(Text))
                      output.Write(
    "<script language='javascript'> alert('" + Text + "');</script>");
              }

          }

    }
  • 相关阅读:
    线程等待和通知
    什么是代码?code?
    代理(正向代理)和反向代理的区别是什么?
    什么是代理,什么是代理服务器,使用代理服务器的目的是什么?
    计算领域,编码的含义到底是什么?
    linux中,通过crontab -e编辑生成的定时任务,写在哪个文件中
    linux,shell中if else if的写法,if elif
    linux,shell脚本中获取脚本的名字,使用脚本的名字。
    linux,crontab定时任务中为脚本指定使用参数,crontab的脚本中是否可以带参数
    ssh在本地调用远程主机上的命令,不登录远程主机shell
  • 原文地址:https://www.cnblogs.com/yvesliao/p/856279.html
Copyright © 2020-2023  润新知