2

私の質問はかなり単純です。これは私がaspxページに持っているものです:

<ul>
    <asp:Repeater runat="server" ID="linksList" OnItemDataBound="linksList_OnItemDataBound" >
    <ItemTemplate>
        <li><asp:HyperLink runat="server" ID="link" /></li>
    </ItemTemplate>
    </asp:Repeater>
</ul>

SQL サーバーからリストへのハイパーリンクのリストを取得しようとしています。これは私がコードビハインドに持っているものです:

protected void Page_Load(object sender, EventArgs e)
{
    DataSet ds = Utilities.RunSelectQuery("SELECT *");
    DataTable dt = ds.Tables[0];

    linksList.DataSource = dt;
    linksList.DataBind();
}

データが にバインドされた後にNavigateUrlTextプロパティを変更するにはどうすればよいですか? コード ビハインドでこれを実行したいのですが、aspx ページを使用して実行すれば動作させることができますが、それは ASP.NET のすべてに反するものです。asp:HyperLinkRepeater<%# Eval("URL") %>

編集:これは、wompのおかげで私にとってうまくいった解決策です:

protected void linksList_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView row = (DataRowView)e.Item.DataItem;
        HyperLink link = (HyperLink)e.Item.FindControl("link");

        link.Text = row["description"].ToString();
        link.NavigateUrl = row["URL"].ToString();
    }
}
4

2 に答える 2

4

実際、テンプレートでDatabinder 構文を使用することは、それを行うための優れた方法です。「ASP.Net のすべてに反する」という意味がわかりません。

ただし、本当にコードで実行したい場合は、OnItemDataBound ハンドラー (作成したように見えます) で実行できます。このようなもの(読み取り:テストされていません)がうまくいくはずです:

void linksList_OnItemDataBound(object Sender, RepeaterItemEventArgs e) 
{

        if (e.Item.ItemType == ListItemType.Item 
              || e.Item.ItemType == ListItemType.AlternatingItem) {

             DataRow row = e.Item.DataItem as DataRow;
             Hyperlink link = e.Item.FindControl("link"));
             link.Text = row["URL"];
             link.NavigateUrl = row["URL"];
             }
          }
       }   
于 2009-08-08T03:04:05.730 に答える
1

やり方はおっしゃる通りです。URL のみを表示する場合は、コード ビハインドでこれを行うと、不要な作業が追加されます。タグを HeaderTemplate と FooterTemplate に配置することもできます。

    <asp:Repeater runat="server" ID="linksList" OnItemDataBound="linksList_OnItemDataBound" >
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate>
        <li><asp:HyperLink runat="server" ID="link" NavigateUrl='<%# Eval("url") %>' /></li>
    </ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
    </asp:Repeater>
于 2009-08-08T03:08:05.600 に答える