数据绑定转发器项的可选超链接

时间:2012-08-29 14:32:50

标签: asp.net data-binding repeater

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

我不确定如何处理这个问题。我应该使用显示或隐藏的HyperLink服务器控件,具体取决于第二列中的值吗?然后,如何更改转发器中每个项目的此控件的Visible属性?有更好的方法吗?

感谢。

6 个答案:

答案 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)

我更喜欢在标记中执行此类简单操作,因为将来更容易测试,修改和适应更改。

以下是如何执行此操作的示例 - 假设我绑定了具有NameShouldWeCreateLinkAddress属性的对象集合:

<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或以编程方式访问其属性。

相关问题