假设我有一个包含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>
有关如何实现这一目标的任何建议吗?
编辑:这篇文章很奇怪。当我去编辑时,我可以看到正确的代码 - 光滑保存并且它不会更新我的代码示例。无论如何,在最后一个代码部分,我想要一个包装图像或图像文本的链接。
答案 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
功能。