我遇到了一个奇怪的问题,对我来说没有任何意义。我正在尝试在页面上动态设置 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 的内容控件,页面将引发错误。
我遇到的问题是,在上面的示例中,当我调用注释的 Master.FindControl 行之一时,TextBox 不再呈现。
有没有人知道为什么会这样......我无法对正在发生的事情做出正面或反面。
谢谢,马克斯