asp.NET去掉form的runat="server"照样使用服务器控件,包括表单的服务器控件
前两天看了朋友的一网站,发现没有如何垃圾代码,连<div class="aspNetHidden">这个也没有,当时就问了下他是怎么做的,结果告诉我把form的runat="server"去掉就可以了,但不能使用表单的服务控件,一些Repeater控件什么的还是可以用的,于是去看了下,发现Repeater是继承System.Web.UI.Control的,而一般的表单控件(服务器控件)是继承System.Web.UI.WebControls.WebControl的,于是自己写了个简单的Button控件,我不继承System.Web.UI.WebControls.WebControl而是继承System.Web.UI.Control,然后测试,把form的runat="server"去掉照样可以。。。。 然后在加事件,发现没用,于是想了下,应该是没有事件的状态试图导致的,所有只能自己去激发了,果断重写OnLoad方法,去里面检测是否是这个Button提交的,是的话就去看看客户有没有绑定事件,有就激发,这样就都正常了,但测试后发现还有一个问题,那就是这个事件不能用代码删除掉,因为在提交过来后编译时,还是会把事件编译进去,那怎么解决了,,,,想了N久,用ViewState属性是最好的,但事件貌似只能出现在+=或-=的情况,但委托是可以的。。。所有就写了个私有的委托,把按钮的点击事件写成add和remove模式,但add和remove时,都是去操作那个委托,如何在重写OnLoad方法里面的时候就使用自己的委托,这样就可以删除了。。。。 /// <summary>/// 在网页上显示下压按钮控件 /// </summary> [DefaultProperty("Text")] [DefaultEvent("Click")] [ToolboxData("<{0}:Button runat=server></{0}:Button>"), System.Drawing.ToolboxBitmap(typeof(Button), "Button.bmp")] public class Button : ControlBase, IPostBackEventHandler { /// <summary> /// 初始化<see cref="Button"/>类的新实例 /// </summary> public Button() : base(HtmlTextWriterTag.Input) { } /// <summary> /// 获取或设置在 <see cref="Button"/> 控件中显示的文本标题 /// </summary> [Category("Appearance")] [DefaultValue("提交")] [Localizable(true)] [Description("设置按钮显示的文本标题")] public string Text { get { if (Vi |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |