У меня есть ретранслятор, в котором слайд показывает изображения из папки, так что, когда вы нажимаете на текущее изображение на слайде, открывается страница продукта, которая показывает информацию о деталях выбранного изображения. Между тем, у меня есть productModel, который отображает все изображения из базы данных, так что при нажатии на любое из изображений открывается страница продукта с изображением, как указано выше. Теперь я обеспокоен тем, что гиперссылка, прикрепленная к ретранслятору, продолжает открывать одну и ту же страницу продукта из другого изображения, которое появляется на повторителе. Может ли кто-нибудь помочь мне указать, что я делаю неправильно? Я буду очень благодарен!Почему я получаю одинаковый идентификатор изображения от другого изображения в репитере?
<ul class="bjqs">
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate><li>
<asp:HyperLink ID="link" runat="server">
<img src='<%# DataBinder.Eval(Container.DataItem,"Value") %>'
title='<%# (DataBinder.Eval(Container.DataItem,"Text").ToString()).Split('.')[0].ToString() %>' alt="">
</asp:HyperLink></li>
</ItemTemplate>
</asp:Repeater>
</ul>
код на стороне сервера:
protected void Page_Load(object sender, EventArgs e)
{
FillPage();
string[] filePaths = Directory.GetFiles(Server.MapPath("~/pages/Management/Images/Products/"));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
string fileName = Path.GetFileName(filePath);
files.Add(new ListItem(fileName, "/pages/Management/Images/Products/" + fileName));
}
Repeater1.DataSource = files;
Repeater1.DataBind();
}
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
ProductModel productModel = new ProductModel();
List<Product> products = productModel.GetAllProducts();
foreach (Product product in products)
{
Panel productPanel = new Panel();
HyperLink hp = (HyperLink)e.Item.FindControl("link");
hp.NavigateUrl = "~/pages/Product.aspx?id=" + product.ID;
}
}
Почему вы получаете новый список продуктов и перекручивание через них в вашем случае ItemDataBound? Я не уверен, что вы делаете, но с беглым взглядом кажется, что существует фундаментальное неправильное использование события ItemDataBound. –
Не могли бы вы определить, где я ошибся? –
Я не могу вам помочь, потому что я не знаю, что вы пытаетесь сделать. Событие ItemDataBound будет запускаться для каждого отдельного элемента в вашем списке файлов (независимо от того, к чему вы привязываетесь). Вы можете получить доступ к каждому элементу в RepeaterItemEventArgs e, чтобы получить то, что вы хотите от него. По-видимому, все, к чему вы привязываетесь, это строковый объект с именем файла. Возможно, вы хотите привязать к списку продуктов, а затем присоединить каждый продукт к файлу? На самом деле это зависит от вас. Надеемся, что понимание ретранслятора и события ItemDataBound поможет вам понять, что вы хотите сделать лучше. –