我已经创建了模板用户控件。我不想通过发布所有用于创建控件的代码来膨胀这篇文章,但足以说我确信代码是正确的。我将发布一些片段,以表明我确实知道这样做的正确方法。首先是我的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
{
}
我的模板标记有一个名为“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);
}
后来,我这个模板用户控件添加到我的网页,并测试它,我添加以下代码:
<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中显式设置了值,并且这些值将通过NamingContainer传递给占位符。
我也可以通过将下面的代码放入网页的代码隐藏文件中来验证这些值,然后查看页面上反映的值。但否则,没有。
Label1.Text = NutritionalLabel_Template1.calories;
我以前见过这个问题,并且不记得原因或解决方法是什么。任何人都可以提供任何指针?
我只创建了几次这些类型的控件,所以对我来说有些新意。任何帮助,将不胜感激。我被遗弃了。
THX