nobugform.cs

来自「这是我学习ASP.net Forums的过程中」· CS 代码 · 共 75 行

CS
75
字号
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace MetaBuilders.WebControls.MasterPages 
{

	/// <summary>
	/// A server form that does not cause a problem by being inside a master page or other naming container.
	/// </summary>
	/// <remarks>
	/// When using this version of masterpages with asp.net 1.1, use this form instead of the standard form element for server forms. This is only required because of a bug in asp.net 1.1's version of __doPostBack.
	/// </remarks>
	public class NoBugForm : System.Web.UI.HtmlControls.HtmlForm 
	{

		/// <summary>
		/// Creates a new instance of the NoBugForm class.
		/// </summary>
		public NoBugForm() 
		{
			System.Version runtimeVersion = System.Environment.Version;
			this.doesDoPostBackBugExist = runtimeVersion.Major == 1 && runtimeVersion.Minor == 1 && runtimeVersion.Build == 4322;
		}

		/// <summary>
		/// Overriden to fix the bug.
		/// </summary>
		public override string UniqueID 
		{
			get 
			{
				if ( this.doesDoPostBackBugExist && this.isNamingContainerBreakoutRequired && this.NamingContainer != this.Page ) 
				{
					String fullUniqueID = base.UniqueID;
					return fullUniqueID.Substring(fullUniqueID.LastIndexOf(":")+1);
				} 
				else 
				{
					return base.UniqueID;
				}
			}
		}

		/// <summary>
		/// Overridden to fix the bug.
		/// </summary>
		/// <param name="writer"></param>
		protected override void RenderAttributes(HtmlTextWriter writer) 
		{
			this.isNamingContainerBreakoutRequired = true;
			base.RenderAttributes (writer);
			this.isNamingContainerBreakoutRequired = false;
		}

		/// <summary>
		/// Overridden to fix the bug.
		/// </summary>
		/// <param name="writer"></param>
		protected override void RenderChildren(HtmlTextWriter writer) 
		{
			this.isNamingContainerBreakoutRequired = true;
			base.RenderChildren (writer);
			this.isNamingContainerBreakoutRequired = false;
		}


		

		private Boolean doesDoPostBackBugExist = false;
		private Boolean isNamingContainerBreakoutRequired = false;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?