更改ASP.NET控件';中继器控件中的属性
我的问题相当简单。这是我在aspx页面上看到的内容:更改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> </
<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>