asp.net2.0自定义服务器控件开发(一)

using  System;
using  System.ComponentModel;
using  System.Security.Permissions;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  Samples.AspNet.CS.Controls
{
    [
    AspNetHostingPermission(SecurityAction.Demand,
        Level 
= AspNetHostingPermissionLevel.Minimal),
    AspNetHostingPermission(SecurityAction.InheritanceDemand,
        Level 
= AspNetHostingPermissionLevel.Minimal),
    
//默认属性
    DefaultProperty("Text"),
    
//拖放到页面上时,自动生成的页面标记,{0}的值后面会提到
    ToolboxData("<{0}:WelcomeLabel runat="server"> </{0}:WelcomeLabel>")
    ]
    
//注意了这个控件派生于WebControl,且继承了样式相关的属性,如 Font、ForeColor 和 BackColor
    public class WelcomeLabel : WebControl
    
{
        [
        Bindable(
true),
        
//把当前属性显示在属性编辑器分类显示时的外观类别下面
        Category("Appearance"),
        
//默认值,应与getter一致
        DefaultValue(""),
        
//当在属性编辑器中选中该属性时,下方出现的描述文本
        Description("The welcome message text."),
        Localizable(
true)
        ]
        
public virtual string Text
        
{
            
get
            
{
                
string s = (string)ViewState["Text"];
                
return (s == null? String.Empty : s;
            }

            
set
            
{
                ViewState[
"Text"= value;
            }

        }

        
        
//继承自 WebControl的自定义控件,重写RenderContents方法
        protected override void RenderContents(HtmlTextWriter writer)
        
{
            writer.WriteEncodedText(Text);
            
if (Context != null)
            
{
                
string s = Context.User.Identity.Name;
                
if (s != null && s != String.Empty)
                
{
                    
string[] split = s.Split('/');
                    
int n = split.Length - 1;
                    
if (split[n] != String.Empty)
                    
{
                        writer.Write(
"");
                        writer.Write(split[n]);
                    }

                }

            }

            writer.Write(
"!");
        }

    }

}

 

继承自System.Web.UI.WebControls.WebControl和System.Web.UI.Control 的区别:

如果控件要呈现用户界面 (UI) 元素或任何其他客户端可见的元素,则应从

System.Web.UI.WebControls.WebControl(或派生类)派生该控件。

如果控件要呈现在客户端浏览器中不可见的元素(如隐藏元素或 meta 元素),

则应从 System.Web.UI.Control 派生该控件。

 

现在这个控件算是写好,在编成.dll之前,肯定要测试一下,测试有两种方法:

1.新建一个页面,在这个页面里面首先注册一下这个控件

<%@ Register TagPrefix="aspSample"  Namespace="Samples.AspNet.CS.Controls"%>

TagPrefix和Namespace表示aspSample这个标记是映射到Samples.AspNet.CS.Controls这个命名空间的

(和jsp的标签是一个道理)

这种方式的缺点是要在每个页面中都注册一下,比较烦琐

2.在web.config配置文件的<system.web>节点下加入

<pages>
   <controls>
       <add tagPrefix="aspSample" namespace="Samples.AspNet.CS.Controls"/>
   </controls>
</pages>

这种方式写入配置文件以后,就不需要在每个页面中进行注册了

注册完了以后

下面就可以在页面中调用该控件进行测试了

在aspx文件中写入

<aspSample:WelcomeLabel  ID="wel" runat="server" ForeColor =red></aspSample:WelcomeLabel>

进行调用

这个字符串不是随便来的哦

还记得前面的ToolboxData("<{0}:WelcomeLabel runat=/"server/"> </{0}:WelcomeLabel>")吗?

{0}就是在页面里注册该控件时,定义的tagPrefix的值

测试无误的话

就可以打开cmd,然后输入

csc /t:library /out:Samples.AspNet.CS.Controls.dll /r:System.dll /r:System.Web.dll *.cs

把当前目录下所有的cs文件创建了一个Samples.AspNet.CS.Controls.dll 程序集

/r:System.dll /r:System.Web.dll 表示链接到此程序集的那些程序集

如果要带上图标那就准备一个16*16的bmp图片WelcomeLabel.bmp

csc /res:WelcomeLabel.bmp,Samples.AspNet.CS.Controls.WelcomeLabel.bmp
/t:library /out:Samples.AspNet.CS.Controls.dll /r:System.dll
/r:System.Web.dll *.cs

注意如果控件名称为 Samples.AspNet.CS.Controls.WelcomeLabel,则嵌入的位图的名称必须为 Samples.AspNet.CS.Controls.WelcomeLabel.bmp

注意:可以选择通过包含程序集级别的 System.Web.UI.TagPrefixAttribute 属性,建议可视化设计器应为控件使用的默认标记前缀。如果设计器未找到在 Web.config 文件或页中的 Register 指令中映射的标记前缀,TagPrefixAttribute 属性就会为可视化设计器提供可以使用的标记前缀,因此该属性非常有用。在工具箱中首次双击控件或将其从工具箱拖动到页中时(后者貌似没有自动注册),此标记前缀将向页进行注册。

在源代码目录中创建一个名为 AssemblyInfo.cs

using System;
using System.Web.UI;
[assembly: TagPrefix("Samples.AspNet.CS.Controls", "aspSample")]

重新编译一下源文件。ok

至于怎么用的话,就不说了

最后注意一点,在用的时候,虽然会自动在每个页面注册了,但是最方便的方法还是在web.config中配置一下

<pages>
   <controls>
       <add tagPrefix="aspSample"  
    namespace="Samples.AspNet.CS.Controls"
    assembly="Samples.AspNet.CS.Controls">
  </add>   </controls>
</pages>

assembly 属性指定控件所在的程序集的名称。addtagPrefix 元素将标记前缀映射到命名空间和程序集的组合。ASP.NET 从 App_Code 目录中的源文件动态生成程序集时,无需提供程序集属性。未使用程序集属性时,ASP.NET 会从通过 App_Code 目录动态生成的程序集加载控件的类型。

 

以上转自msdn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值