我已經創建了模板用戶控件。我不想通過發佈所有用於創建控件的代碼來膨脹這篇文章,但足以說我確信代碼是正確的。我將發佈一些片段,以表明我確實知道這樣做的正確方法。首先是我的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