0

我的 ASP.NET 页面上有一个数据绑定中继器。我正在使用转发器来构建一个元素列表,每个元素都包含一个文本(由数据绑定表中的一列给出),该文本可能超链接到另一个页面。是否应包含超链接由数据绑定表中的另一列确定。

我不知道如何解决这个问题。我应该使用根据第二列中的值显示或隐藏的 HyperLink 服务器控件吗?然后如何更改转发器中每个项目的此控件的 Visible 属性?有更好的方法吗?

谢谢。

4

6 回答 6

0

1 最火的方法

是的,您将 asp:label 和 asp:hyerlink 添加到模板中,在 ItemDataBound 上,您可以访问您的数据,并调整超链接和标签的可见性。

2 秒方法(快速)

Visible或根据Eval.DataBinderc# 表达式调整您的属性

对于您的超链接(只是示例)

Visible='<%#
CustomFunction((object)DataBinder.Eval(Container.DataItem, "YourColumn")).ToString()
%>'
于 2012-08-29T14:35:54.020 回答
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
于 2012-08-29T14:42:34.263 回答
0

您可以像这样在转发器中设置可见属性:

<asp:HyperLink ID="lnk" runat="server" Visible='<%# Boolean.Parse(Eval("IsVisible").ToString()) %>' />
于 2012-08-29T14:43:09.613 回答
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;
             }
          }
       }
于 2012-08-29T14:45:41.440 回答
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;
             }
      }
  }     
于 2012-08-29T14:46:14.173 回答
0

我更喜欢在标记中做这种简单的事情,因为它更容易测试、修改和适应未来的变化。

这是一个如何做到这一点的示例 - 假设我正在绑定到具有 a Name、 aShouldWeCreateLink和一个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或以编程方式从代码隐藏中访问它们的属性。

于 2012-08-29T15:04:18.233 回答