前两天看了朋友的一网站,发现没有如何垃圾代码,连<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方法里面的时候就使用自己的委托,这样就可以删除了。。。。

下面把我的代码上传上来吧。。。。           (当你拖动控件到页面时,可能会提示要在form的runat="server"里面,点击确定,在把form的runat="server"去掉 可以了)

最后欢迎来自然框架企鹅群:82598514    快乐你我_快乐编程

/// <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 (ViewState["Text"].IsNull())//自定义扩展方法 等效于!Object.ReferenceEquals(null,OnViewClick)                {                    ViewState["Text"] = "提交";                }return (string)ViewState["Text"];            }set {                ViewState["Text"] = value;            }        }/// <summary>/// 在单击 <see cref="Button"/>  控件时发生/// </summary>        [ Description("单击控件时发生")]public event EventHandler Click        {            add {                OnViewClick = value;            }            remove {

                OnViewClick = null;            }        }        [Browsable(false)]private EventHandler OnViewClick        {get { return (EventHandler)ViewState["OnClick"]; }set { ViewState["OnClick"] = value; }        }/// <summary>/// 获取或设置在引发某个 <see cref="Button" /> 控件的 <see cref="Button.Click" /> 事件时所执行的客户端脚本/// </summary>        [DefaultValue(""), Description("在提交前执行的客户端脚本"), Themeable(false), Category("Behavior")]public virtual string OnClientClick        {get            {

string str = (string)this.ViewState["OnClientClick"];if (str == null)                {return string.Empty;                }return str;            }set            {this.ViewState["OnClientClick"] = value;            }        }// public virtual bool isSubmit        /// <summary>/// 当由类实现时,使服务器控件能够处理将窗体发送到服务器时引发的事件/// </summary>/// <param name="eventArgument">表示要传递到事件处理程序的可选事件参数的 <see cref="System.String"/></param>        public void RaisePostBackEvent(string eventArgument)        {if (!OnViewClick.IsNull())//自定义扩展方法 等效于!EventHandler.ReferenceEquals(null,OnViewClick)            {                OnViewClick.Invoke(this, new EventArgs());            }        }/// <summary>/// 重写引发 <see cref="System.Web.UI.Control.Load"/> 事件/// </summary>/// <param name="e">包含事件数据的 System.EventArgs 对象</param>        protected override void OnLoad(EventArgs e)        {base.OnLoad(e);if (!OnViewClick.IsNull())//自定义扩展方法 等效于!EventHandler.ReferenceEquals(null,OnViewClick)            {string temp = Page.Request.Form[this.ID];if (!temp.IsNull())                {                    RaisePostBackEvent(temp);                }            }        }protected override void RenderChildren(HtmlTextWriter writer)        {            writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ID);            writer.AddAttribute(HtmlTextWriterAttribute.Name, this.ID);            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");base.RenderChildren(writer);if (!this.OnClientClick.IsNullOrWhiteSpace())//自定义扩展方法 等效于!string.IsNullOrWhiteSpace(this.OnClientClick)            {                writer.AddAttribute(HtmlTextWriterAttribute.Onclick, this.OnClientClick);            }            writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);

        }    }

[ParseChildren(true), Themeable(true), PersistChildren(false)]public  class ControlBase:System.Web.UI.Control    {private HtmlTextWriterTag htmltag;public ControlBase(HtmlTextWriterTag tag = HtmlTextWriterTag.Span)        {            htmltag = tag;        }private Style controlsStyle;/// <summary>/// 获取或设置由 Web 服务器控件在客户端呈现的Style样式/// </summary>         [Browsable(false), Description("在客户端呈现的级联样式表 (CSS) 类"), Editor("System.ComponentModel.Design.MultilineStringEditor,System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]public virtual Style Styles        {get            {if (controlsStyle.IsNull())                {                    controlsStyle = new Style();                }return controlsStyle;            }set {                controlsStyle = value;            }        }/// <summary>/// 获取或设置由 Web 服务器控件在客户端呈现的级联样式表 (CSS) 类/// </summary>         [Category("Appearance"), DefaultValue(""), Description("在客户端呈现的级联样式表 (CSS) 类"), System.Web.UI.CssClassProperty]public virtual string CssClass { get { return Styles.CssClass; } set { Styles.CssClass = value; } }/// <summary>/// 获取或设置 Web 服务器控件的宽度。/// </summary>         [Category("Layout"), DefaultValue(typeof(Unit), ""), Description("器控件的宽度")]public virtual Unit Width         {get             {return Styles.Width;             }set             {                 Styles.Width = value;             }         }/// <summary>获取或设置 Web 服务器控件的背景色。</summary>/// <returns>表示控件背景色的 <see cref="T:System.Drawing.Color" />。默认值为 <see cref="F:System.Drawing.Color.Empty" />,表示未设置此属性。</returns>         [Category("Appearance"), DefaultValue(typeof(Color), ""), Description("设置 Web 服务器控件的背景色"), TypeConverter(typeof(WebColorConverter))]public virtual Color BackColor         {get {return this.Styles.BackColor;             }set {this.Styles.BackColor = value;             }         }/// <summary>获取或设置 Web 控件的边框颜色。</summary>/// <returns>表示控件的边框颜色的 <see cref="T:System.Drawing.Color" />。默认值为 <see cref="F:System.Drawing.Color.Empty" />,表示未设置此属性。</returns>         [Description("边框颜色"), Category("Appearance"), DefaultValue(typeof(Color), ""), TypeConverter(typeof(WebColorConverter))]public virtual Color BorderColor         {get             {return this.Styles.BorderColor;             }set             {this.Styles.BorderColor=value;             }         }/// <summary>获取或设置 Web 服务器控件的边框宽度。</summary>/// <returns>///<see cref="T:System.Web.UI.WebControls.Unit" />,表示 Web 服务器控件的边框宽度。默认值为 <see cref="F:System.Web.UI.WebControls.Unit.Empty" />,表示未设置此属性。</returns>/// <exception cref="T:System.ArgumentException">指定的边框宽度是负值。</exception>         [Description("控件的边框宽度"), Category("Appearance"), DefaultValue(typeof(Unit), "")]public virtual Unit BorderWidth         {get             {return this.Styles.BorderWidth;             }set             {this.Styles.BorderWidth = value;             }         }/// <summary>获取或设置 Web 服务器控件的边框样式。</summary>/// <returns>///<see cref="T:System.Web.UI.WebControls.BorderStyle" /> 枚举值之一。默认值为 NotSet。</returns>         [DefaultValue(BorderStyle.NotSet), Category("Appearance"), Description("控件的边框样式")]public virtual BorderStyle BorderStyle         {get             {return this.Styles.BorderStyle;             }set             {this.Styles.BorderStyle = value;             }         }/// <summary>获取与 Web 服务器控件关联的字体属性。</summary>/// <returns>///<see cref="T:System.Web.UI.WebControls.FontInfo" />,表示 Web 服务器控件的字体属性。</returns>         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Description("控件关联的字体"), Category("Appearance"), NotifyParentProperty(true)]public virtual FontInfo Font         {get             {return Styles.Font;             }         }/// <summary>获取或设置 Web 服务器控件的前景色(通常是文本颜色)。</summary>/// <returns>表示控件前景色的 <see cref="T:System.Drawing.Color" />。默认值为 <see cref="F:System.Drawing.Color.Empty" />。</returns>         [DefaultValue(typeof(Color), ""), Category("Appearance"), Description("控件的前景色(通常是文本颜色)"), TypeConverter(typeof(WebColorConverter))]public virtual Color ForeColor         {get             {return Styles.ForeColor;             }set             {                 Styles.ForeColor = value;             }         }/// <summary>获取或设置当鼠标指针悬停在 Web 服务器控件上时显示的文本。</summary>/// <returns>当鼠标指针悬停在 Web 服务器控件上时显示的文本。默认值为 <see cref="F:System.String.Empty" />。</returns>         [Category("Behavior"), DefaultValue(""), Description("服务器控件上时显示的文本")]public virtual string Title//这里不要改成ToolTip,因为改成ToolTip后在我本机和Vs11里面都会造成VS直接崩溃,         {get             {string str = (string)this.ViewState["Title"];if (str != null)                 {return str;                 }return string.Empty;             }set             {this.ViewState["Title"] = value;             }         }public override void RenderControl(HtmlTextWriter writer)         {if (Visible)             {base.RenderControl(writer);if (!Title.IsNullOrEmpty())                 {                     writer.AddAttribute(HtmlTextWriterAttribute.Title, Title);                 }if (!Styles.IsEmpty)                 {                     writer.EnterStyle(Styles, htmltag);

                 }else                 {                     writer.RenderBeginTag(htmltag);                 }

                 writer.RenderEndTag();             }         }

转载于:https://www.cnblogs.com/happyyouandme/archive/2011/12/26/2301907.html

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

  1. input type=button与asp:button的区别,以及runat=server的作用

    <input type="button">与<asp:button>的区别,以及runat="server"的作用 在<input ...

  2. ASP.NET中使用script runat=server

    ASP.NET中使用<script runat="server"> 标签: asp.netserver服务器objectasp 2012-04-11 09:46 475 ...

  3. ASP.NET中aspx页面runat=server的本质(Essensial of runat=”server” in ASP.NET)

    今天同事问我一个"神奇"的问题,另一个同事"神奇"地找出了问题但无法解释,归咎于一种"习惯"或者"下次注意".现在我把问 ...

  4. Form中runat=server属性的意义

    运行编译aspx文件时,无runat server属性的标签直接写入Response:有runat server属性的标签,将被转换为HtmlContrl控件加入到ASP.NET自带的控件集合中. 用 ...

  5. [翻译-ASP.NET MVC]Contact Manager开发之旅迭代3 - 验证表单

    本翻译系列为asp.net mvc官方实例教程.在这个系列中,Stephen Walther将演示如何通过ASP.NET MVC framework结合单元测试.TDD.Ajax.软件设计原则及设计模 ...

  6. 处理ajax表单验证结果,使用 jQuery Form 插件完成带数据验证的 Ajax 表单

    表单提交之前,一般我们要在前端对表单的输入值做一些基本验证,以避免恶意提交,并提高安全性.我们可以通过两个 jQuery 插件实现这两个功能:Malsup's AjaxForm 和 Bassistan ...

  7. html中用form单选框右侧提示汗字,HTML表单(Forms)解析

    HTML表单(Form)是HTML的一个重要部分,主要用于采集和提交用户输入的信息. 举个简单的例子,一个让用户输入姓名的HTML表单(Form).示例代码如下: 请输入你的姓名: 01. 02. 输 ...

  8. form标签的action之前 加密_HTML从零开始——表单标签

    网页发展的过程中,总还是需要和用户互动的,尤其是需要个人信息.注册账号.处理事务等等的时候,用户要按照网站规定的格式来填写信息,这就需要表单了. 表单(form)是用户输入信息与网页互动的一种形式.大 ...

  9. html下拉列表自动打开,Html form select下拉列表菜单与跳转菜单表单标签篇

    Html form select下拉列表菜单与select跳转菜单表单标签案例教程 一.Form select语法与结构:   -   TOP DIVCSS5 DIVCSS5 二.Form selec ...

最新文章

  1. 【ACM】杭电OJ 2020(排序)
  2. 【架构】阿里中台内容整理(部分)
  3. android引用另一个项目作为library错误
  4. 工作流Activiti5.13学习笔记(一)
  5. Python+VSCode是我的心头爱,飞一般的Coding体验!
  6. php apd,PHP debug 工具 之 APD
  7. 实时视频流(url)——延时显示
  8. python自动化接口测试excel脚本_python+requests+excel 实现接口自动化测试
  9. 知识点1--认识SSM框架并准备项目
  10. 三、基础的Serializer序列化器
  11. k8s的优势和部署模式
  12. 模具工业及其发展趋势
  13. Java经典代码工具类2
  14. 用javaScript制作爱心特效
  15. 活久见!西电毕设门处理结果:只让肇事者延毕一年、取消保研
  16. 雷军回顾20年前自己的“程序人生”,还用吴奇隆的歌词文艺了一把
  17. 举个栗子~Tableau 技巧(215):简化实现雷达图(Radar Chart)
  18. 给hacke拨乱反正 黑客、红客、蓝客究竟是什么
  19. 铝阳极封孔废水除镍树脂CH-90
  20. 【linux驱动开发】i2c驱动框架之温湿度传感器htu21d

热门文章

  1. spring_restful_json_jdbc
  2. Fastjson反序列化泛型类型时候的一个问题
  3. SRM 627 D1L2GraphInversionsDFS查找指定长度的所有路径 Binary indexed tree (BIT)
  4. Android 简介:Android SDK 和开发框架简介
  5. silverlight 学习笔记 (七):Prism的第一个应用
  6. screen 用法汇总
  7. 内存分配知识:全局,局部,静态变量
  8. 另一个.NET上的文档数据库Raven[转载]
  9. 安装python扩展库时只能使用pip_使用pip安装Python扩展库的方法
  10. url存在宽字节跨站漏洞_【XSS漏洞】XSS漏洞相关总结v1.0