2

定義済みのすべてのルートをコード ビハインドなしでページに出力したいのでRouteTable.Routes、マークアップで Repeater にバインドする必要があります。どうすればよいですか-DataSourceではなく、マークアップで<asp:Repeater>のみ利用可能な値があります。DataSourceIDDataSource を宣言し、RouteTable.Routesその ID を Repeater に提供する必要があると思いますが、どうすればよいですか?

繰り返しになりますが、コード ビハインドを使用せず、宣言型のみのソリューションが必要です。

私はasp.net 4.0を使用しています(MVCではありません)

4

2 に答える 2

5

asp.netリピーターコントロールにはDataSourceプロパティがあり、aspxマークアップで設定できます(以下のスクリーンショットを参照)。

リピーターマークアップインテリセンスのスクリーンショット

通常、行われるのは、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#コードを介して呼び出す必要があると思います。これが純粋に宣言的な方法で実行できるとは思いません。

于 2012-04-29T01:22:38.723 に答える
1

これを機能させるには、最小限の配管を行う必要があります。グリッドビューのサンプルを次に示します。リピーター向けにもテクニックを適応させることができます。

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>

注: ここにデータテーブルを追加しました。グリッドビューは、すぐに使用できる並べ替えに関してのみそのオブジェクトを理解するためです。したがって、余分なコードを記述する必要はありません。それ以外の場合は、任意のIEnumerableオブジェクトを使用します。ただし、ソート用に独自のロジックを作成する必要があります。リピーターとは関係ありませんが、これは言及しておこうと思いました。

今、あなたは何も呼び出す必要はありませんDataBind()!!!

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

于 2012-05-07T12:30:23.300 に答える