更改ASP.NET控件';中继器控件中的属性

更改ASP.NET控件';中继器控件中的属性,asp.net,controls,repeater,code-behind,pageload,Asp.net,Controls,Repeater,Code Behind,Pageload,我的问题相当简单。这是我在aspx页面上看到的内容: <ul> <asp:Repeater runat="server" ID="linksList" OnItemDataBound="linksList_OnItemDataBound" > <ItemTemplate> <li><asp:HyperLink runat="server" ID="link" /></li> </

我的问题相当简单。这是我在aspx页面上看到的内容:

<ul>
    <asp:Repeater runat="server" ID="linksList" OnItemDataBound="linksList_OnItemDataBound" >
    <ItemTemplate>
        <li><asp:HyperLink runat="server" ID="link" /></li>
    </ItemTemplate>
    </asp:Repeater>
</ul>
将数据绑定到
转发器后,如何更改
asp:HyperLink
中的
NavigateUrl
Text
属性?我想在codebehind中这样做,如果我在aspx页面中使用
,我可以让它工作,但这有点违背ASP.NET的全部内容

编辑:多亏了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();
    }
}
事实上,在模板中使用是一种很好的方法,我不确定你说的“与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"];
             }
          }
       }   

方法正如你所说。如果您只希望显示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>


啊,谢谢,这正是我需要的。我之所以需要知道如何使用codebehind方法,是因为我有更复杂的示例,它们需要操作数据,而不仅仅是直接从SQL表中提取数据。我用正确实现的方法更新了我的原始帖子,你给我的方法几乎正确,它只需要几个强制转换。把标签放在页眉和页脚模板中而不是放在外面有什么好处吗?我试图让HTML编码人员尽可能地阅读代码。是的,如果你把网格隐藏在代码后面,你就可以坐在那里。如果查询返回0条记录,则可能会隐藏网格。当你把
    放在你的headertemplate中时,它也会把它隐藏起来。
        <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>