快速业务通道

asp.NET去掉form的runat="server"照样使用服务器控件,包括表单的服务器控件

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-10

前两天看了朋友的一网站,发现没有如何垃圾代码,连<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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号