【ZT】asp.NET去掉form的runat="server"照样使用服务器控件,包括表单的服务器控件
2011-12-26 16:47
621 查看
唉,收藏按钮不好用了呢。。。。只好手动收藏一下了,有空瞅瞅。。。 = =||||
from:/article/5412078.html
前两天看了朋友的一网站,发现没有如何垃圾代码,连<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 快乐你我_快乐编程
复制代码
复制代码
from:/article/5412078.html
前两天看了朋友的一网站,发现没有如何垃圾代码,连<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(); } }
复制代码
相关文章推荐
- asp.NET去掉form的runat="server"照样使用服务器控件,包括表单的服务器控件
- 不使用ASP.NET服务器端控件(包括form表单不加runat="server")来触发.cs里的事件(方法),(适用于有代码洁癖者)。
- ASP.NET 2.0服务器控件与form runat=server标记 !!
- asp.net中不使用服务器控件,直接post 表单数据到server
- ASP.NET 2.0服务器控件与form runat=server标记[转载]
- ASP.NET 2.0服务器控件必须放具有runat="server"的窗体标记内
- asp.net 必须放在具有<form runat=server 的窗体标记内中的服务器控件
- 关于使用Asp.net导出Excel,遭遇“LinkButton必须放在一个具有runat=server的标签的Form”的解决方案。
- [导入]ASP.NET中使用多个runat=server form
- ASP.NET中使用多个runat=serverform
- 在ASP.NET的server form 中使用easyui的layout布局控件
- ASP.NET中使用<script runat="server">
- 关于form表单中禁用所有Asp.net 服务器控件TextBox的方法
- ASP.NET中使用多个runat=server form
- ASP.NET中使用<script runat="server">
- 解决ASPX页面中WEB控件必须在含有RUNAT="SERVER"中的FORM表单中
- asp.net 的所有控件都必须放置在<form runat=server><form>内吗?
- ASP.NET中使用多个runat=server form(转)
- asp.net页面间传值的几种方法 表单提交 传送页面代码 复制代码 <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server
- asp.net为前台Runat="server"控件设置样式和添加属性