0

さて、私はASP.NETにかなり慣れていませんが、何が起こっているのか理解していると思います。私はそれらの中でレポートを作成する任務を負っています。これまでのところ、この1つの問題を除いてすべてを停止しました。

DataRowCollectionにデータバインドされたRepeaterを使用し、それを介してプログラムでテーブルを作成します。私は似たようなものを持っています:

Private Sub SubAcctGrid_OnItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
    If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
        Dim currentrow = TryCast(e.Item.DataItem, DataRow)
        Dim acctSummaryTable = New Table With {.ID = "acctSummary" & e.Item.ItemIndex, .CssClass = "minisub_acct_table"}
        Dim drillDownTable = New Table With {.ID = "drillDownTable" & e.Item.ItemIndex, .CssClass = "drilldown_table"}

        ' Build both tables here

        acctSummaryTable.Rows(1).Cells(0).Attributes.Add("onclick", String.Format("displayDetailTable('{0}')", drillDownTable.ID))
        acctSummaryTable.Rows(1).Cells(1).Attributes.Add("onclick", String.Format("displayDetailTable('{0}')", drillDownTable.ID))

        e.Item.Controls.Add(acctSummaryTable)
        e.Item.Controls.Add(drillDownTable)

    End If
End Sub

要素IDを受け取り、テーブルを表示または非表示にするJavascript関数があります。

function displayDetailTable(tableID) {
    var table = document.getElementById(tableID)
    if (table.style.display == "none") {
        table.style.display = "table";
    }
    else {
        table.style.display = "none";
    }
}

ただし、私の人生では、正しい要素IDを渡すことはできません。私が理解していることから、ASP.NETは、一意性を確保するために、割り当てたIDを巨大な長いIDに変換します。たとえば、IDが「drillDownTable0」のテーブルを割り当てると、HTMLマークアップで「ctl00_drillDownTable0」が吐き出されます。最初は機能しましたが、リピーターが新しい行にバインドされ、「ctl01_drillDownTable0」などが表示されます。

上記のコードでセルに属性を追加するClientID、ID、UniqueIDを試しましたが、必要な処理が実行されません。

そのIDを取得してJavascript関数に渡す方法はありますか?または、より良い質問は次のとおりです。IDはいつ生成され、ページがHTMLでレンダリングされる前にIDにアクセスできますか?

4

1 に答える 1

1

あなたはおそらく探しています ClientID

String.Format("displayDetailTable('{0}')", drillDownTable.ClientID) 

それとは別に、RepeaterのItemCreatedイベントで動的にコントロールを作成することをお勧めします。すべてのポストバックですべての動的コントロールを再作成する必要があります。ItemDataBoundはデータバインディングでのみ呼び出されますがItemCreated、すべてのポストバックで呼び出されます。

編集:あなたがすでにClientIDを試したことがあるのを見ただけです。ただし、ItemdataBoundにテーブルを作成することによって発生する問題である可能性があります。

于 2012-04-19T21:36:51.353 に答える