我的ASP.NET页面上有一个数据绑定转发器。我正在使用转发器来构建元素列表,每个元素由一个文本(由数据绑定表中的列给出)组成,可以超链接到另一个页面。是否应包含超链接由数据绑定表中的另一列确定。
我不确定如何处理这个问题。我应该使用显示或隐藏的HyperLink服务器控件,具体取决于第二列中的值吗?然后,如何更改转发器中每个项目的此控件的Visible属性?有更好的方法吗?
感谢。
答案 0 :(得分:0)
1 Firest方法
是的,您将asp:label和asp:hyerlink添加到您的模板,在ItemDataBound上,您可以访问您的数据,并调整您的超链接和标签的可见性。
2秒方法(快速)
或者根据c#表达式
,使用Visible
调整您的媒体资源Eval.DataBinder
对于您的Hyperelink(只是示例)
Visible='<%#
CustomFunction((object)DataBinder.Eval(Container.DataItem, "YourColumn")).ToString()
%>'
答案 1 :(得分:0)
您可以拥有两个控件。一个是超链接,一个是常规标签或文字。然后,在ItemDataBound事件中,根据第二列的值显示/隐藏相应的控件。请参阅下面的示例代码。您显然需要根据自己的情况进行更改。
Private Sub Repeater_ItemDataBound(ByVal sender As Object, Byval e As RepeaterItemEventArgs)
If (e.Item.ItemType Is ListItemType.Item) Or (e.Item.ItemType Is ListItemType.AlternatingItem) Then
Dim hyperlink = CType(e.Item.FindControl("HyperLink1"), HyperLink)
Dim label = CType(e.Item.FindControl("Label1"), Label)
Dim dataSource = CType(e.Item.DataItem, MyDataSourceObject)
If (dataSource.HyperLink = String.Empty) Then
hyperlink.visible = false
Else
label.visible = false
hyperlink.NavigateUrl = dataSource.HyperLink
End If
End If
End Sub
答案 2 :(得分:0)
您可以在转发器中设置可见属性,如下所示:
<asp:HyperLink ID="lnk" runat="server" Visible='<%# Boolean.Parse(Eval("IsVisible").ToString()) %>' />
答案 3 :(得分:0)
试试这个:
void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
// Execute the following logic for Items and Alternating Items.
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
DataRowView row = e.Item.DataItem as DataRowView;
if (row["ColumnName2"] == "Something") {
((HyperLink)e.Item.FindControl("HyperLink1")).NavigateUrl= row["ColumnName1"];
}
else
{
((HyperLink)e.Item.FindControl("HyperLink1")).Visible = False;
}
}
}
答案 4 :(得分:0)
使用Repeater ItemDataBound命令..
void repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
DataRowView row = (DataRowView)e.Item.DataItem;
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==ListItemType.AlternatingItem)
{
if(row["othercolumnName"].ToString()==true)//You can check the value here..use your logic
{
LinkButton lnk=(LinkButton)e.Item.FindControl("lnkID");
lnk.Visible=False;
}
}
}
答案 5 :(得分:0)
我更喜欢在标记中执行此类简单操作,因为将来更容易测试,修改和适应更改。
以下是如何执行此操作的示例 - 假设我绑定了具有Name
,ShouldWeCreateLink
和Address
属性的对象集合:
<ItemTemplate>
<tr>
<td>
<%--Bind to Name Property--%>
<%# Eval("Name") %>
</td>
<%--Should we show a hyperlink or a simple text with the address?--%>
<td>
<%# Eval("ShouldWeCreateLink").ToString() == "True" ? string.Format("<a href=\"Link.aspx?ID={0}\">{1}</a>", Eval("ID"),"Click me") : Eval("Address")%>
</td>
</tr>
</ItemTemplate>
当需要创建超链接时,上面会生成这样的超链接:
<a href="link.aspx?ID=9">Click me</a>
尽可能避免使用服务器控件,除非您需要从代码隐藏中ViewState
或以编程方式访问其属性。