控件开发读书笔记


默认有一个类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"就不起效果了。

优质内容筛选与推荐>>
1、数据库设计三范式
2、ORACLE SQL性能优化系列 12
3、git在win7下安装的问题
4、SQL 中查询某个字段数据匹配字符不存在
5、python字符串格式化输出


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号