【发布时间】:2023-03-29 07:10:01
【问题描述】:
我遇到了一个对我来说毫无意义的奇怪问题。我正在尝试在页面上动态设置 MasterPage 内容控件。我可以很好地使用以下代码:
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
MasterPageFile = "~/MasterPages/Default.master";
string existantContentPlaceHolderID = "ContentPlaceHolder1";
string nonExistantContentPlaceHolderID = "foo";
//Control c = Master.FindControl(existantContentPlaceHolderID);
//Control c1 = Master.FindControl(nonExistantContentPlaceHolderID);
TextBox t = new TextBox
{
Text = "Text"
};
ITemplate iTemplate = new GenericITemplate(container => container.Controls.Add(t));
AddContentTemplate(existantContentPlaceHolderID, iTemplate);
}
public delegate void InstantiateTemplateDelegate(Control container);
public class GenericITemplate : ITemplate
{
private readonly InstantiateTemplateDelegate m_instantiateTemplate;
public void InstantiateIn(Control container)
{
m_instantiateTemplate(container);
}
public GenericITemplate(InstantiateTemplateDelegate instantiateTemplate)
{
m_instantiateTemplate = instantiateTemplate;
}
}
这很好用,除了我希望能够在调用 AddContentTemplate 之前仔细检查 MasterPage 上是否存在 contentPlaceHolderID,因为如果添加指向不存在 ContentPlaceHolder 的 Content 控件,页面将引发错误。
我遇到的问题是,在上面的示例中,当我调用注释的 Master.FindControl 行之一时,TextBox 不再呈现。
有没有人知道为什么会这样......我无法确定正在发生的事情。
谢谢, 最大
【问题讨论】:
标签: c# asp.net master-pages itemplate