我有一個幻燈片顯示來自文件夾的圖像的中繼器,以便當您單擊幻燈片中的當前圖像時,會打開一個產品頁面,其中顯示所選圖像的詳細信息。 同時,我有一個productModel列出數據庫中的所有圖像,這樣當您單擊任何圖像時,它將打開上面的圖像產品頁面。 現在,我擔心的是,我連接到中繼器的超鏈接會不斷從中繼器上顯示的不同圖像打開相同的產品頁面。任何人都可以請幫我指出我做錯了什麼?我將不勝感激!爲什麼我會從中繼器的不同圖像視圖中獲取相同的圖像ID?
<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事件可以幫助你弄清楚你想做的更好。 –