2012-01-05 3 views
0

テンプレート付きのユーザーコントロールを作成しました。私はコントロールを作成するために使用したすべてのコードを投稿してこの投稿を膨らませたくないが、コードが正しいことをかなり確信していると言うだけで十分である。私はこれを行うための適切な方法を知っていることを示すためにいくつかのスニペットを投稿します。まず私の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」という名前のプレースホルダコントロールを持ち、他の何とか何とか何とかを切断、I」

このテンプレート化されたUserControlをWebページに追加してテストし、次のコードを追加します。

<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を介してプレースホルダに持ち越されていることを確認できます。

また、Webページのコードビハインドファイルに次のコードを置き、ページに反映された値を確認することで、値が設定されていることを確認することもできます。しかし、そうでなければ、何も。

Label1.Text = NutritionalLabel_Template1.calories; 

私が前に発生し、原因や解決が何だったか覚えていないことができ、この問題を見てきました。誰でも任意のポインタを提供できますか?

私はこのタイプのコントロールを数回しか作成していないので、少し新しくなっています。どんな助けもありがとう。私はstumppedです。私は関係なく、誰も問題に何らかの手がかりを提供することができなかった理由の、私は問題が何であったか考え出したと私は誰かもしれない人のためのソリューションを投稿しようと思いました。このポストへの応答を受け取ったことがない

Thxを

答えて

0

潜在的にあなたにいくつかの不必要な不満を救うために同様の問題があります。 ;-)

私はDataBind()メソッドをデフォルトページのPage_Loadイベントに追加するのを忘れていました。 Microsoftでは、このメソッドはソースからサーバーコントロールへのデータのバインドを保証し、データベースクエリを通じてデータセットを取得した後に一般的に使用されます。しかし、ほとんどのコントロールは自動的にデータバインディングを実行するので、通常はこのメソッドを明示的に呼び出す必要はありません。

ただし、カスタムのテンプレートデータバインドコントロールを作成すると、このメソッドも一般的にオーバーライドされます。しかし私の場合は、TemplatedコントロールのPageInitをオーバーライドしました。 Databindメソッドではありません。テンプレートのコントロールとデータがこの場合バインドされていることを確認するため、呼び出しページのPage_Loadイベントのメソッドを明示的に呼び出す必要があります。

関連する問題