2012-04-29 6 views
2

定義済みのすべてのルートをコードなしでページに出力したいので、RouteTable.Routesをマークアップのリピータにバインドする必要があります。どうすればいいですか - <asp:Repeater>は、DataSourceIDの値のみがマークアップで利用可能であり、データソースではありません。 私はRouteTable.RoutesのDataSourceを宣言し、そのIDをRepeaterに渡す必要があると仮定しますが、どうすればいいですか?IEnumerableをaspxマークアップでリピータにバインドするにはどうすればよいですか?

この場合も、コードビハインドなしに宣言のみのソリューションが必要です。

私はasp.net 4.0(ないMVC)を使用してい

+0

あなたはobjectdatasourceというタグを付けていますので、私はあなたが答えを見つけたと仮定しています...それのためのルックアップmsdn。 – deostroll

+0

私はまだ、私は今のところコードを追加することに頼っていない。 – Andrey

答えて

5

のasp.net Repeaterコントロールは、DataSourceプロパティを持っている、とあなたは(下のスクリーンショットを参照)のaspxマークアップでそれを設定することができます。

Screen shot of Repeater markup intellisense

通常、DataSourceプロパティをデータバインド式に設定すると、Page.DataBind()メソッドが呼び出されたときに評価が取得されます。

<asp:Repeater ID="foo" DataSource = '<%# GetRoutes() %>' runat=server ></asp:Repeater> 

私はあなたがまだaspxページ上のデータバインディングを開始することPage.DataBind()を呼び出すためにページ上のいくつかのコードが必要になると思います。

protected void Page_Load(object sender, EventArgs e) 
    { 
     Page.DataBind(); 
    } 

このコードは、aspxページでサーバーのコードブロックでは、コードビハインドを使用したくないので、コードビハインドに入れたりすることができます。しかし、私はそれがページイベントハンドラのC#コードを介して呼び出されなければならないと考えています。私はこれが純粋に宣言的なやり方でできるとは思わない。

1

この作業を行うには、最小限の配管工事を行う必要があります。ここでは、gridviewのサンプルです。あなたもリピーターのための技術を適応させることができます。

のDataSourceオブジェクトクラス:

public class MyObjectDataSourceEntity 
{ 
    [DataObjectMethod(DataObjectMethodType.Select)] 
    public DataTable GetSomeRecords() 
    { 
     DataTable names = new DataTable(); 
     DataColumn FirstName = names.Columns.Add(); 
     FirstName.DataType = typeof(string); 
     FirstName.ColumnName = "FirstName"; 
     DataColumn LastName = names.Columns.Add(); 
     LastName.DataType = typeof(string); 
     LastName.ColumnName = "LastName"; 

     DataRow row = names.NewRow(); 
     row[0] = "Arun"; 
     row[1] = "Jayapal"; 
     names.Rows.Add(row); 
     row = names.NewRow(); 
     row[0] = "Namith"; 
     row[1] = "Chandran"; 
     names.Rows.Add(row); 
     return names; 
    } 

あなたがSystem.ComponentModel名前空間を含める必要があります。

マークアップ:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
     DataSourceID="ObjectDataSource1"> 
    </asp:GridView> 
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
     SelectMethod="GetSomeRecords" 
     TypeName="ObjectDataSourceDemo.MyObjectDataSourceEntity"> 
    </asp:ObjectDataSource> 

注:それは右アウト・オブ・ボックスのソートに来るときにGridViewにのみ、そのオブジェクトを理解するので、私はここにデータテーブルを追加しました。したがって、余分なコードを書く必要はありません。それ以外の場合は、IEnumerableオブジェクトを使用します。しかし、ソートのために独自のロジックを記述する必要があります。リピーターとは関係ありませんが、私はこれについて言及すると思いました。

これでDataBind()は何でも呼び出す必要はありません。

PS:エンティティのコードを記述したら、まずプロジェクトをビルドします。その後、デザイナーがページにObjectDataSourceコントロールを追加することができます。ウィザードはプロジェクト内のサポート対象オブジェクトを自動的に検出しますが、まずソリューションを構築する必要があります。

関連する問題