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 回答