فهرست منبع

2010-07-16 Marek Habersack <[email protected]>

	* Login.cs: implemented RenderOuterTable (4.0)

svn path=/trunk/mcs/; revision=160497
Marek Habersack 15 سال پیش
والد
کامیت
930ed3afae

+ 2 - 0
mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog

@@ -1,5 +1,7 @@
 2010-07-16  Marek Habersack  <[email protected]>
 
+	* Login.cs: implemented RenderOuterTable (4.0)
+
 	* FormViewRow.cs: added internal property RenderJustCellContents
 	which makes the control render only its children (4.0)
 

+ 54 - 20
mcs/class/System.Web/System.Web.UI.WebControls/Login.cs

@@ -45,18 +45,31 @@ namespace System.Web.UI.WebControls {
 	[Bindable (false)]
 	[DefaultEvent ("Authenticate")]
 	[Designer ("System.Web.UI.Design.WebControls.LoginDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
-	public class Login : CompositeControl 
+	public class Login : CompositeControl
+#if NET_4_0
+	, IRenderOuterTable
+#endif
 	{
 		#region LoginContainer
-		sealed class LoginContainer : Table
+		// TODO: This class should probably be folded into a generic one with BaseChangePasswordContainer
+		sealed class LoginContainer : Control
 		{
-			readonly Login _owner = null;
-			TableCell _containerCell = null;
+			readonly Login _owner;
+#if NET_4_0
+			bool renderOuterTable;
+#endif
+			Table _table;
+			TableCell _containerCell;
 
 			public LoginContainer (Login owner)
 			{
 				_owner = owner;
-				InitTable ();
+#if NET_4_0
+				renderOuterTable = _owner.RenderOuterTable;
+
+				if (renderOuterTable)
+#endif
+					InitTable ();
 			}
 			
 			public override string ID {
@@ -76,23 +89,35 @@ namespace System.Web.UI.WebControls {
 
 			public void InstantiateTemplate (ITemplate template)
 			{
-				template.InstantiateIn (_containerCell);
+#if NET_4_0
+				if (!renderOuterTable)
+					template.InstantiateIn (this);
+				else
+#endif
+					template.InstantiateIn (_containerCell);
 			}
 
 			void InitTable ()
 			{
+				_table = new Table ();
 				_containerCell = new TableCell ();
 
 				TableRow row = new TableRow ();
 				row.Cells.Add (_containerCell);
-				Rows.Add (row);
-			}
+				_table.Rows.Add (row);
 
-			protected internal override void Render (HtmlTextWriter writer) {
-				CellSpacing = 0;
-				CellPadding = _owner.BorderPadding;
-				ApplyStyle (_owner.ControlStyle);
-				Attributes.CopyFrom (_owner.Attributes);
+				Controls.AddAt (0, _table);
+			}
+			
+			protected internal override void Render (HtmlTextWriter writer)
+			{
+				if (_table != null) {
+					_table.CellSpacing = 0;
+					_table.CellPadding = _owner.BorderPadding;
+					_table.ApplyStyle (_owner.ControlStyle);
+					_table.Attributes.CopyFrom (_owner.Attributes);
+				}
+				
 				base.Render (writer);
 			}
 			
@@ -417,9 +442,9 @@ namespace System.Web.UI.WebControls {
 		LoginContainer container;
 
 		string _password;
-
-
-
+#if NET_4_0
+		bool renderOuterTable = true;
+#endif
 		public Login ()
 		{
 		}
@@ -862,7 +887,13 @@ namespace System.Web.UI.WebControls {
 					ViewState ["PasswordRequiredErrorMessage"] = value;
 			}
 		}
-
+#if NET_4_0
+		[DefaultValue (true)]
+		public virtual bool RenderOuterTable {
+			get { return renderOuterTable; }
+			set { renderOuterTable = value; }
+		}
+#endif
 		[DefaultValue (false)]
 		[Themeable (false)]
 		public virtual bool RememberMeSet {
@@ -1161,13 +1192,16 @@ namespace System.Web.UI.WebControls {
 
 		protected internal override void Render (HtmlTextWriter writer)
 		{
+#if NET_4_0
+			VerifyInlinePropertiesNotSet ();
+#endif
 			// VisibleWhenLoggedIn isn't applicable to the default login page
 			if (!VisibleWhenLoggedIn && !IsDefaultLoginPage () && IsLoggedIn ())
 				return;
 
-			if (Page != null) {
-				Page.VerifyRenderingInServerForm (this);
-			}
+			Page page = Page;
+			if (page != null)
+				page.VerifyRenderingInServerForm (this);
 
 			EnsureChildControls ();