希望今天大家都很好。
我遇到了一个我正在努力解决的小问题,我确信这可能是一件简单的事情,但是我盯着它的时间越长,看起来感觉就越不明显。
我有一个详细信息视图,其中包含listview。列表视图显示图像。我已经将图像包裹在asp:超链接但是无法从后面的代码设置navigateUrl,我试图从listviews数据绑定事件中做到这一点。由于某种原因,超链接控制很难找到。
我的.aspx:
<asp:DetailsView ID="productDetails" OnDataBound="productDetails_DataBound" runat="server" AutoGenerateRows="false">
<Fields>
<asp:TemplateField>
<ItemTemplate>
<div class="row">
<div class="col-sm-12">
<h2 id="prodNamelbl" runat="server" class="text-center"><%# Eval("ProductName") %></h2>
<asp:Image ID="prodMainImage" runat="server" ImageAlign="Middle" ImageUrl='<%# Eval("ImagePath") %>' />
</div>
</div>
<div class="row">
<div class="col-sm-12">
<asp:ListView ID="listOtherImages" OnDataBound="listOtherImages_DataBound" OnPagePropertiesChanging="listOtherImages_PagePropertiesChanging" runat="server">
<LayoutTemplate>
<div class="row">
<div runat="server" id="itemPlaceholder"></div>
</div>
<asp:DataPager runat="server" PagedControlID="listOtherImages" ID="imgListDataPager"
PageSize="3">
<Fields>
<asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="false" ShowPreviousPageButton="true"
ShowNextPageButton="false" />
<asp:NumericPagerField ButtonType="Link" />
<asp:NextPreviousPagerField ButtonType="Link" ShowNextPageButton="true" ShowLastPageButton="false" ShowPreviousPageButton = "false" />
</Fields>
</asp:DataPager>
</LayoutTemplate>
<ItemTemplate>
<div class="col-sm-4">
<asp:HyperLink ID="imgLink" runat="server" >
<asp:Image ID="supImage" Height="80px" Width="80px" ImageAlign="AbsMiddle" AlternateText='<%# Eval("ImgId") %>' ImageUrl='<%# Eval("ImagePath") %>' runat="server" />
</asp:HyperLink>
</div>
</ItemTemplate>
</asp:ListView>
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
我的代码背后:
protected void listOtherImages_DataBound(object sender, EventArgs e)
{
ListView imgs = (ListView)productDetails.FindControl("listOtherImages");
foreach (ListViewItem item in imgs.Items)
{
try
{
// find controls
Image prodImage = (Image)item.FindControl("supImg");
HyperLink picLink = (HyperLink)item.FindControl("imgLink");
// assign value to NavigateUrl
picLink.NavigateUrl = "~/ProductCatalogue/prodImage.aspx?ImageId=" + prodImage.AlternateText;
}
catch (Exception err)
{
lblError.Text = "Error finding controls: " + err.Data + "<br />" + err.Message + "<br />" + err.InnerException;
}
}
}
感谢先进的任何可以提供帮助的人;)
答案 0 :(得分:0)
我认为您不必要地循环遍历数据绑定事件上的列表视图项。更改功能如下,然后检查。
protected void listOtherImages_DataBound(object sender, ListViewItemEventArgs e)
{
if(e.Item.ItemType == ListViewItemType.DataItem )
{
try
{
// find controls
Image prodImage = (Image)e.Item.FindControl("supImg");
HyperLink picLink = (HyperLink)e.Item.FindControl("imgLink");
// assign value to NavigateUrl
picLink.NavigateUrl = "~/ProductCatalogue/prodImage.aspx?ImageId=" + prodImage.AlternateText;
}
catch (Exception err)
{
lblError.Text = "Error finding controls: " + err.Data + "<br />" + err.Message + "<br />" + err.InnerException;
}
}
}
另外我注意到在数据绑定事件中你只是分配了超链接的navigateURL。您可以直接在ASPX中进行如下操作
<asp:HyperLink ID="imgLink" runat="server"
NavigateUrl='<%# "~/ProductCatalogue/prodImage.aspx?ImageId=" + Eval("ImgId") %>'
Checked='<%# Eval("IsActive") %>'>