如何根据asp.net转发器中的条件将图像包装在<a></a>中?

时间:2011-10-31 04:25:42

标签: c# asp.net

假设我有一个包含ImageUrl,Text,LinkUrl和Title列的数据表。

我将其数据绑定到转发器并显示所有内容而没有任何问题。但是,LinkUrl可以为空,然后我希望代码如下所示。如果LinkUrl包含字符串/链接,那么我想用图像链接来包装图像。如果我需要澄清更多信息,请提出问题。

示例代码:

<asp:Repeater runat="server" ID="rptImageGallery">
<ItemTemplate>
<div class="slide">
    <asp:Image ID="Image1" runat="server" ImageUrl='<%#UrlHelper(DataBinder.Eval(Container.DataItem, "ImageUrl"))%>'>
    <h2><%# DataBinder.Eval(Container.DataItem, "Title") %></h2>
    <p><%# DataBinder.Eval(Container.DataItem, "Text")%></p>
</div>
</ItemTemplate>
</asp:Repeater>

代码背后:

DataTable dt = new DataTable();
dt = collListItems.GetDataTable().AsEnumerable()
    .Where(a => Convert.ToString(a["Published"]) == "1")
        .CopyToDataTable();

rptImageGallery.DataSource = dt;
rptImageGallery.DataBind();

因此,如果当前行包含LikUrl中的链接,那么我希望转发器提供类似这样的内容

<asp:Repeater runat="server" ID="rptImageGallery">
<ItemTemplate>
<div class="slide">
    <asp:Image ID="Image1" runat="server" ImageUrl='<%# UrlHelper(DataBinder.Eval(Container.DataItem, "FileLeafRef"))%>' />
    <a href='<%# DataBinder.Eval(Container.DataItem, "LinkUrl")%>' runat="server"><%# DataBinder.Eval(Container.DataItem, "Title") %></h2></a>
    <p><%# DataBinder.Eval(Container.DataItem, "Text")%></p>                       
</div>
</ItemTemplate>
</asp:Repeater>

有关如何实现这一目标的任何建议吗?

编辑:这篇文章很奇怪。当我去编辑时,我可以看到正确的代码 - 光滑保存并且它不会更新我的代码示例。无论如何,在最后一个代码部分,我想要一个包装图像或图像文本的链接。

1 个答案:

答案 0 :(得分:0)

试试这个:

<asp:Repeater ID="rpt1" runat="server">
    <ItemTemplate>
        <div class="slide">
            <asp:Image ID="img1" runat="server" ImageUrl='<%#GetUrl(Eval("Image"))%>'/>
            <%# WrapTitle(Eval("Title"), Eval("Link"))%>
        </div>
    </ItemTemplate>
</asp:Repeater>

后面的代码(我添加了完整的代码,以便您可以测试):

Public Class Repeater
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim dt As DataTable = New DataItem().GetData()
            rpt1.DataSource = dt
            rpt1.DataBind()
        End If
    End Sub

    Protected Function WrapTitle(ByVal title As Object, ByVal lnk As Object) As String
        If Not String.IsNullOrWhiteSpace(lnk.ToString()) Then
            Return String.Format("<a href='{0}'>{1}</a>", lnk, title)
        End If
        Return title.ToString()
    End Function

    Protected Function GetUrl(ByVal img As String) As String

        Return Page.ResolveUrl("~/Images/") + img
    End Function

End Class

Public Class DataItem
    Private lnks() As String = {"http://www.google.com", "http://www.yahoo.com", "http://www.bing.com", "http://www.superuser.com", "http://www.stackoverflow.com", ""}
    Private titles() As String = {"Google", "Yahoo", "Bing", "superuser", "stackoverflow", "ask.com"}
    Private images() As String = {"nav_logo91.png", "yahoo.png", "bing.png", "superuser.png", "stackoverflow.png", ""}

    Public Function GetData() As DataTable
        Dim dtb As New DataTable
        dtb.Columns.Add("title")
        dtb.Columns.Add("link")
        dtb.Columns.Add("Image")

        For i As Integer = 0 To titles.Length - 1
            dtb.Rows.Add(New Object() {titles(i), lnks(i), images(i)})
        Next

        Return dtb
    End Function

End Class

PS: - 可能你不需要GetUrl功能。