e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
128 lines
3.4 KiB
C#
128 lines
3.4 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="Substitution.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.UI.WebControls {
|
|
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Globalization;
|
|
using System.Security.Permissions;
|
|
using System.Web;
|
|
using System.Web.UI;
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para></para>
|
|
/// </devdoc>
|
|
[
|
|
DefaultProperty("MethodName"),
|
|
Designer("System.Web.UI.Design.WebControls.SubstitutionDesigner, " + AssemblyRef.SystemDesign),
|
|
ParseChildren(true),
|
|
PersistChildren(false),
|
|
]
|
|
public class Substitution : Control {
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para></para>
|
|
/// </devdoc>
|
|
public Substitution() {
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para></para>
|
|
/// </devdoc>
|
|
[
|
|
DefaultValue(""),
|
|
WebCategory("Behavior"),
|
|
WebSysDescription(SR.Substitution_MethodNameDescr)
|
|
]
|
|
public virtual string MethodName {
|
|
get {
|
|
string s = ViewState["MethodName"] as string;
|
|
return s == null? String.Empty : s;
|
|
}
|
|
set {
|
|
ViewState["MethodName"] = value;
|
|
}
|
|
}
|
|
|
|
|
|
protected override ControlCollection CreateControlCollection() {
|
|
return new EmptyControlCollection(this);
|
|
}
|
|
|
|
// SECURITY CODE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// VSWhidbey 253188: Permission assert to support page running below full trust
|
|
[ReflectionPermission(SecurityAction.Assert, Flags=ReflectionPermissionFlag.MemberAccess)]
|
|
private HttpResponseSubstitutionCallback GetDelegate(Type targetType, string methodName) {
|
|
return (HttpResponseSubstitutionCallback)Delegate.CreateDelegate(
|
|
typeof(HttpResponseSubstitutionCallback), targetType, methodName);
|
|
}
|
|
|
|
protected internal override void OnPreRender(EventArgs e) {
|
|
base.OnPreRender(e);
|
|
|
|
// VSWhidbey 84748: Temp fix, throw if we are within a cached control
|
|
Control parent = Parent;
|
|
while (parent != null) {
|
|
if (parent is BasePartialCachingControl) {
|
|
throw new HttpException(
|
|
SR.GetString(SR.Substitution_CannotBeInCachedControl));
|
|
}
|
|
parent = parent.Parent;
|
|
}
|
|
}
|
|
|
|
|
|
protected internal override void Render(HtmlTextWriter writer) {
|
|
RenderMarkup(writer);
|
|
}
|
|
|
|
internal void RenderMarkup(HtmlTextWriter writer) {
|
|
if (MethodName.Length == 0) {
|
|
return;
|
|
}
|
|
|
|
TemplateControl target = TemplateControl;
|
|
if (target == null) {
|
|
return;
|
|
}
|
|
|
|
// get the delegate to the method
|
|
HttpResponseSubstitutionCallback callback = null;
|
|
|
|
try {
|
|
callback = GetDelegate(target.GetType(), MethodName);
|
|
}
|
|
catch {
|
|
}
|
|
|
|
if (callback == null) {
|
|
throw new HttpException(
|
|
SR.GetString(SR.Substitution_BadMethodName, MethodName));
|
|
}
|
|
|
|
// add the substitution to the response
|
|
Page.Response.WriteSubstitution(callback);
|
|
}
|
|
}
|
|
}
|