• 控件开发读书笔记


    默认有一个类Class1,但头部没有对WebControls的引用,要加上using System.Web.UI.WebControls;
    把默认Class1继承自WebControl
    这样就可以写出如下代码:
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
      writer.WriteLine("Hello World");
    }
    编译生成
    切换到Web 应用程序,添加引用,项目,选择前面刚才的项目
    这里,我一直没办法让它出现在工具箱中(但有时又会,原因不知道。如果我们加的是ASP.NET 服务器控件,WebCustomControl,就会自动多出一个栏及一个图标)

    对默认的Default.aspx进行编辑
    先要在头部输入如下代码:
    <%@ Register Assembly="ClassLibrary1" Namespace="ClassLibrary1" TagPrefix="cc1" %>
    然后在HTML中输入<cc1:即可智能提示相应内容
    完整输入的内容为:<cc1:Class1 ID="Class11" runat="server" />
    知识点:
    <%@ Register Assembly="ClassLibrary1" Namespace="ClassLibrary1" TagPrefix="cc1" %>的含义:
    注册用户控件,建立别名。
    TagPrefix为命名空间的别名,如果改为其它内容,要等一下HTML中才能反映出来,并且不能为空,不能没有这一项。
    Namespace为命名空间
    Assembly为程序集,即编译后的DLL文件名
    下次看到时,就不要不知道了。
    <%@ Register %>只对当前页有效,如果对整个项目有效,则在web.config的system.web中注册
        <pages>
          <controls>
            <add assembly="ClassLibrary1" namespace="ClassLibrary1" tagPrefix="cc2" />
          </controls>
        </pages>
    如果页面也注册不同的别名,则该页面两个别名都可以用,如下:
        <cc1:Class1 ID="Class11" runat="server" />
        <cc2:Class1 ID="Class12" runat="server" />
    不过别名的提示没有那么灵敏好像。都要等一会才会出来。

    Page间接继承自Control类,Control的RenderControl()方法默认逻辑为判断Control.Visible属性,为True,则调用Render()方法,而Render()方法除了生成自己的内容外,还调用RenderChildren()方法触发所有子控件,子控件又RenderControl()->Render()->RenderChildren()
    我在Default.aspx中上加一个这样控件:
    <cc1:Class1 ID="Class11" runat="server" Visible="false" />
    运行结果真的是没出来了
    然后再把控件override的内容由Render改为RenderControl,结果真的Visible="false"就不起效果了。

  • 相关阅读:
    开采镍矿与冶炼加工镍的上市公司一览(转载)
    2010年螺纹期货基本走势分析(个人分析原创文章)
    从松柏那转载的ajax类
    推荐30个可以养站的博客(转载)
    年报掘金:机构增仓路线图曝光(20100306转载)
    一个人过习惯了,两个人不知道怎么过。。。
    各大搜索引擎的网站登录入口(转载)
    志向
    主力做庄骗术
    网上发现襄阳市场,说是正品,初步推断举步维艰
  • 原文地址:https://www.cnblogs.com/yzx99/p/1369774.html
Copyright © 2020-2023  润新知