Liberty Crown Infotech Ответов: 1

Почему я получаю один и тот же идентификатор изображения из разных представлений изображения в ретрансляторе?


У меня есть ретранслятор, который показывает слайды изображений из папки, так что при нажатии на текущее изображение на слайде открывается страница продукта, которая показывает подробную информацию о выбранном изображении. Между тем, у меня есть 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>

с фоновым кодом:

<pre lang="C#">protected void Page_Load(object sender, EventArgs e)
{
    FillPage();
        string[] filePaths = Directory.GetFiles(Server.MapPath(&quot;~/pages/Management/Images/Products/&quot;));
        List&lt;ListItem&gt; files = new List&lt;ListItem&gt;();
        foreach (string filePath in filePaths)
        {             
            string fileName = Path.GetFileName(filePath);   
            files.Add(new ListItem(fileName, &quot;/pages/Management/Images/Products/&quot; + fileName));
        }
        Repeater1.DataSource = files;
        Repeater1.DataBind();
    }
}

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

        ProductModel productModel = new ProductModel();
    List&lt;Product&gt; products = productModel.GetAllProducts();

    foreach (Product product in products)
    {
        Panel productPanel = new Panel();        
        HyperLink hp = (HyperLink)e.Item.FindControl(&quot;link&quot;);
        hp.NavigateUrl = &quot;~/pages/Product.aspx?id=&quot; + product.ID;
    }
}</pre>

ZurdoDev

Почему вы заранее обсуждаете продукты в событии ItemDataBound? ItemDataBound срабатывает для каждого элемента в вашем ретрансляторе. Вам нужно установить гиперссылку один раз, а не в цикле foreach.

1 Ответов

Рейтинг:
2

ZurdoDev

Как уже упоминалось в комментариях, каждый раз, когда элемент создается в вашем ретрансляторе (Repeater1_ItemDataBound), вы просматриваете все свои продукты и устанавливаете гиперссылки NavigateURL. Таким образом, он будет выполнять это для каждого элемента.

Скорее всего, вам понадобится оператор if, чтобы найти правильный продукт, соответствующий строке, в которой вы находитесь.


Liberty Crown Infotech

Спасибо за попытку решения проблемы, Райан. Простите мою наивность, на самом деле я не профессионал в ретрансляторах. У меня есть Удалить для каждого, и это полезно. Теперь каждый раз, когда я нажимаю на изображение ретранслятора, я получаю один и тот же url-адрес " http://localhost:1051/pages/Product.aspx?id=". Как передать значение id int в url-адрес в зависимости от текущего изображения из папки, используя оператор if, предложенный Вами выше?

ZurdoDev

Есть много способов сделать это, один из них-добавить метку с идентификатором продукта и использовать Eval для установки значения. Затем в событии itemdatabound найдите элемент управления и установите url-адрес гиперссылки.

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.onitemdatabound(v=vs. 110).aspx

Liberty Crown Infotech

Спасибо за попытку решения проблемы Ряндеву. Прошу прощения за свою наивность, я не профессионал в ретрансляторах. Я удалил базу foreach по вашему совету, и это помогает. Тем не менее, я продолжаю получать один и тот же url-адрес при нажатии на любое текущее изображение без передачи какого-либо значения идентификатора продукта "http://localhost:1051/pages/Product.aspx?id=" можете ли вы дать мне представление о том, как использовать оператор if, чтобы найти правильные продукты из папки, соответствующие строке, в которой я нахожусь?

ZurdoDev

Сделайте то, что я предложил в предыдущем комментарии.

Liberty Crown Infotech

Пожалуйста, я, кажется, не знаю, как этого добиться, у меня есть проблема сопоставления каждого файла с продуктом в модели продукта.