2009-07-13 11 views
1

は、私は現在、ほぼすべての私のページにコード(または似何か)のこのブロックを持っている:ユーザーコントロールでHTMLを「ラップする」最適な方法は何ですか?

<div class="tasks"> 
    <ul> 
     <li><a href="#">Do something</a></li> 
     <li><a href="#">Do something else</a></li> 
    </ul> 
</div> 

しかし、私は、ユーザーコントロールにこれを有効にする必要があります。私はそこに「テンプレート」という概念を使用していると私もどのようにそれはないことを実現することを実現

<foo:TaskList id="foo" runat="server"> 
    <Tasks> 
     <ul> 
      <li><a href="#">Do something</a></li> 
      <li><a href="#">Do something else</a></li> 
     </ul> 
    </Tasks> 
</foo:TaskList> 

<foo:TaskList id="foo" runat="server"> 
    <Task><a href="#">Do something</a></Task> 
    <Task><a href="#">Do something else</a></Task> 
</foo:TaskList> 

かさえ:私は、次のような何かをしたいと思いますテンプレートユーザーコントロールを使用することを意図しています。だからどのように私はHTMLの可変部分をユーザーコントロールにまとめたいのですか?

PS。このコントロールにデータを挿入するためにDataBindingまたはコードビハインドを使用したくありません。すべての項目がASPXファイルに表示されている必要があります。

+0

...あなたはアイテムが中に見えるようにしたいわけVisual Studioのデザイナー?どうして? –

+0

私は実際にデザイナーについては考えていませんでした。私はASPXコードでそれらを見ることができるようにしたいと思います。 – James

答えて

1

これらのクラスを見ると、以下のマークアップを.aspxページに表示できます。あなたはもっと深く進むことができます。必要なのは、親オブジェクトのプロパティだけです。だから、達成するのはかなり簡単です。

<Test:TestUserControl> 
    <Tasks> 
     <Test:Task Value="Some Value" Text="Some Text" /> 
     <Test:Task Value="Another Value" Text="More Text" /> 
    </Tasks> 
</Test:TestUserControl> 

namespace TestWebControls 
{ 
    public class TestUserControl : WebControl 
    { 

     private List<Task> _Tasks; 

     [NotifyParentProperty(true)] 
     [PersistenceMode(PersistenceMode.InnerProperty)] 
     [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
     public List<Task> Tasks 
     { 
      get 
      { 
       return _Tasks; 
      } 
      set 
      { 
       _Tasks = value; 
      } 
     } 

     public TestUserControl() 
     { 

     } 
    } 

    public class Task : WebControl 
    { 
     public string Value { get; set; } 
     public string Text { get; set; } 
    } 
} 

ここで、レンダリングにはもっと多くの作業が必要です。したがって、ASP.NETでServer Controlsを検索すると、残りの作業を完了することができます。デザイン時にコントロールが表示されるように、デザイナーを作成する必要があります。そしてそれらをレンダリングする方法。

+0

それは面白いです、ありがとう。ユーザーコントロールで同じことを達成できますか? (それに何か利点はありますか?) – James

+0

それはユーザーコントロールですが、デザイナーで行うのではなく、C#コードで行います。私は実際にはユーザーコントロールでそれを試していません。サブ項目を配置するにはList <>または配列が必要なので、私はあなたができるとは思いません。 –

0

多くのページで同じHTMLコードを使用しているとすると、マスターページをチェックアウトすることもできます。

マスターページでは、複数の(コンテンツ)ページで再利用できる共通の「ページフレーム」を定義できます。

(ただし、この提案はおそらく既にマスターページについて知っているので完全に不適切です)。

0

HTMLソース内のUserControlsにパラメータを渡すことはできません。

あなたがページのPage_Loadイベントにパラメータを設定する必要があります。

public class MyUserControl : UserControl 
{ 
    public void SetTasks(Tasks[] tasks) 
    { 
     // code 
    } 
} 

し、ページのソースコードに:

protected void Page_Load(object sender, EventArgs e) 
{ 
    myUserControl.SetTasks(... tasks ...); 
} 
関連する問題