You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			182 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="HtmlContainerControl.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>                                                                
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| namespace System.Web.UI.HtmlControls {
 | |
|     using System.Runtime.Serialization.Formatters;
 | |
|     using System;
 | |
|     using System.Collections;
 | |
|     using System.ComponentModel;
 | |
|     using System.IO;
 | |
|     using System.Web.UI;
 | |
|     using System.Security.Permissions;
 | |
| 
 | |
| /*
 | |
|  *  A control representing an intrinsic Html tag.
 | |
|  */
 | |
| 
 | |
|     /// <devdoc>
 | |
|     /// <para>The <see langword='HtmlContainerControl'/> 
 | |
|     /// class defines the methods,
 | |
|     /// properties and events
 | |
|     /// available to all Html Server controls that must have a
 | |
|     /// closing tag.</para>
 | |
|     /// </devdoc>
 | |
|     abstract public class HtmlContainerControl : HtmlControl {
 | |
|         /*
 | |
|          * Creates a new WebControl
 | |
|          */
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Initializes a new instance of a <see cref='System.Web.UI.HtmlControls.HtmlContainerControl'/> class using 
 | |
|         ///    default values.</para>
 | |
|         /// </devdoc>
 | |
|         protected HtmlContainerControl() : this("span") {
 | |
|         }
 | |
| 
 | |
|         /*
 | |
|          *  Creates a new HtmlContainerControl
 | |
|          */
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Initializes a new instance of a <see cref='System.Web.UI.HtmlControls.HtmlContainerControl'/> class using the 
 | |
|         ///    specified string.</para>
 | |
|         /// </devdoc>
 | |
|         public HtmlContainerControl(string tag) : base(tag) {
 | |
|         }
 | |
| 
 | |
|         /*
 | |
|          * The inner html content between the begin and end tag.
 | |
|          * A set will replace any existing child controls with a single literal.
 | |
|          * A get will return the text of a single literal child OR
 | |
|          * will throw an exception if there are no children, more than one
 | |
|          * child, or the single child is not a literal.
 | |
|          */
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para>
 | |
|         ///       Gets or sets the
 | |
|         ///       content found between the opening and closing tags of the specified HTML server control.
 | |
|         ///    </para>
 | |
|         /// </devdoc>
 | |
|         [
 | |
|         Browsable(false),
 | |
|         DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
 | |
|         HtmlControlPersistable(false),
 | |
|         ]
 | |
|         public virtual string InnerHtml {
 | |
|             get {
 | |
|                 if (IsLiteralContent())
 | |
|                     return((LiteralControl) Controls[0]).Text;
 | |
|                 else if (HasControls() && (Controls.Count == 1) && Controls[0] is DataBoundLiteralControl) 
 | |
|                     return ((DataBoundLiteralControl) Controls[0]).Text;
 | |
|                 else {
 | |
|                     if (Controls.Count == 0)
 | |
|                         return String.Empty;
 | |
| 
 | |
|                     throw new HttpException(SR.GetString(SR.Inner_Content_not_literal, ID));
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             set {
 | |
|                 Controls.Clear();
 | |
|                 Controls.Add(new LiteralControl(value));
 | |
|                 ViewState["innerhtml"] = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /*
 | |
|          * The inner text content between the begin and end tag.
 | |
|          * A set will replace any existing child controls with a single literal.
 | |
|          * A get will return the text of a single literal child OR
 | |
|          * will throw an exception if there are no children, more than one child, or
 | |
|          * the single child is not a literal.
 | |
|          */
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para>
 | |
|         ///       Gets or sets all text between the opening and closing tags
 | |
|         ///       of the specified HTML server control.
 | |
|         ///    </para>
 | |
|         /// </devdoc>
 | |
|         [
 | |
|         Browsable(false),
 | |
|         DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
 | |
|         HtmlControlPersistable(false),
 | |
|         ]
 | |
|         public virtual string InnerText {
 | |
|             get {   
 | |
|                 return HttpUtility.HtmlDecode(InnerHtml); 
 | |
|             }
 | |
| 
 | |
|             set {   
 | |
|                 InnerHtml = HttpUtility.HtmlEncode(value); 
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para>[To be supplied.]</para>
 | |
|         /// </devdoc>
 | |
|         protected override ControlCollection CreateControlCollection() {
 | |
|             return new ControlCollection(this);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         protected override void LoadViewState(object savedState) {
 | |
|             if (savedState != null) {
 | |
|                 base.LoadViewState(savedState);
 | |
|                 string s = (string)ViewState["innerhtml"];
 | |
|                 // Dev10 703061 If InnerHtml is set, we want to clear out any child controls, but not dirty viewstate
 | |
|                 if (s != null) {
 | |
|                     Controls.Clear();
 | |
|                     Controls.Add(new LiteralControl(s));
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /*
 | |
|          * Render the control into the given writer.
 | |
|          */
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         protected internal override void Render(HtmlTextWriter writer) {
 | |
|             RenderBeginTag(writer);
 | |
|             RenderChildren(writer);
 | |
|             RenderEndTag(writer);
 | |
|         }
 | |
| 
 | |
|         /*
 | |
|          * Override to prevent InnerHtml from being rendered as an attribute.
 | |
|          */
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         protected override void RenderAttributes(HtmlTextWriter writer) {
 | |
|             ViewState.Remove("innerhtml");
 | |
|             base.RenderAttributes(writer);
 | |
|         }
 | |
| 
 | |
|         /*
 | |
|          * Render the end tag, </TAGNAME>.
 | |
|          */
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         protected virtual void RenderEndTag(HtmlTextWriter writer) {
 | |
|             writer.WriteEndTag(TagName);
 | |
|         }
 | |
|     }
 | |
| }
 |