1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
//------------------------------------------------------------------------------
// <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);
}
}
}
|