Я создал шаблонный пользовательский элемент управления. Я не хочу раздувать этот пост, публикуя весь код, который я использовал для создания элемента управления, но достаточно сказать, что я совершенно уверен, что код правильный. Я опубликую несколько фрагментов, чтобы показать, что я знаю правильный способ сделать это. Во-первых, моя реализация ITemplate:
private ITemplate _NutritionLabelTemplate = null;
[TemplateContainer(typeof(NutritionLabelContainer))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate NutritionLabelTemplate
{
get { return _NutritionLabelTemplate; }
set { _NutritionLabelTemplate = value; }
}
Тогда реализация моего интерфейса INamingContainer:
public class NutritionLabelContainer : Control, INamingContainer
{
}
Моя разметка шаблона имеет элемент управления Placeholder с именем "phNutritionLabel_Template" и, прорезая другой бла-бла-бла, у меня есть что-то вроде:
phNutritionLabel_Template.Controls.Clear();
if (NutritionLabelTemplate != null)
{
NutritionLabelContainer nContainer = new NutritionLabelContainer();
nContainer.calcium = calcium;
nContainer.calories = calories;
NutritionLabelTemplate.InstantiateIn(nContainer);
phNutritionLabel_Template.Controls.Add(nContainer);
}
После этого я добавляю этот шаблон UserControl на свою веб-страницу и для проверки добавляю следующий код:
<uc1:NutritionalLabel_Template ID="NutritionalLabel_Template1" runat="server"
servingSize="28"
calories="46">
<NutritionLabelTemplate>
<h1>Template Calories</h1>
<span style="font-size:large; font-style:italic;"></span>
<asp:Label ID="Label1" runat="server">
<%#Container.calories %>
</asp:Label>
<br />
</NutritionLabelTemplate>
</uc1:NutritionalLabel_Template>
Когда я запускаю страницу, значение # Container.calories не отображается, оно полностью пустое. Я отладил свой код и, пройдя его, я вижу, что значения явно устанавливаются в NamingContainer шаблонного элемента управления и что значения передаются в Placeholder через NamingContainer.
Я также могу проверить, установлены ли значения, поместив следующий код в файл выделенного кода веб-страницы, а затем просмотрите значения, отраженные на странице. Но в остальном ничего.
Label1.Text = NutritionalLabel_Template1.calories;
Я видел, как эта проблема возникла раньше, и не могу вспомнить причину или решение. Кто-нибудь может предоставить какие-либо указатели?
Я создал эти типы элементов управления только несколько раз, так что это немного ново для меня. Любая помощь будет оценена. Я в тупике.
Thx