为了更好地理解我的问题,我将首先解释我对该网站的主要目标。我的网站是一家音乐商店,有6种不同品牌的吉他(Ibanez,Fender,Gibson,PRS,Musicman和ESP)。现在我已经创建了一个网页,它将显示每个吉他品牌的标识。
以下是用于显示吉他徽标的aspx代码:
<%@ Page Title='' Language='C#' MasterPageFile='~/MasterPage.master'
AutoEventWireup='true' CodeFile='GuitarBrands.aspx.cs'
Inherits='Pages_GuitarBrands' %>
<asp:Content ID='Content1' ContentPlaceHolderID='ContentPlaceHolder1'
Runat='Server'>
<% foreach (guitarBrand guitar in brandList) { %>
<table class="one-third">
<tr>
<th rowspan="3" class="guitarLogoHover">
<a href="<%= guitar.page%>"><img src="<%= guitar.image %>"/></a>
</th>
</tr>
</table>
<% } %>
</asp:Content>
以下是用于显示吉他徽标的aspx.cs代码:
public partial class Pages_GuitarBrands : System.Web.UI.Page
{
public List<guitarBrand> brandList { get; set; }
private string brandType = "Guitar";
protected void Page_Load(object sender, EventArgs e)
{
brandList = new List<guitarBrand>();
brandList = ConnectionClassBrands.GetBrandsByType(brandType);
}
上面的代码成功显示了aspx网页中的所有6个吉他徽标。现在接下来要做的是,当我点击一个吉他标志时,让我说我点击Ibanez标志。它应该打开一个新的网页并显示该品牌内可用的吉他。棘手的部分是,我正在尝试为所有吉他品牌创建一个单独的网页,它将像一个模板一样,这样我就不需要每个吉他品牌都有很多aspx页面。以下是我对此的尝试。
首先,在我的连接类代码中,所有数据检索都会发生。我添加了一个名为guitar的私有字符串字段,每次在foreach循环中迭代时都会检索吉他品牌。
代码1 - 这是用于显示吉他徽标的新aspx代码。如下所示,我在ConnectionClassGuitarItems中创建了一个名为guitar的字符串字段,以获得吉他品牌。
<%@ Page Title='' Language='C#' MasterPageFile='~/MasterPage.master'
AutoEventWireup='true' CodeFile='GuitarBrands.aspx.cs'
Inherits='Pages_GuitarBrands' %>
<asp:Content ID='Content1' ContentPlaceHolderID='ContentPlaceHolder1'
Runat='Server'>
<% foreach (guitarBrand guitar in brandList) { %>
<table class="one-third">
<tr>
<th rowspan="3" class="guitarLogoHover">
<a href="<%= guitar.page%>"><img src="<%= guitar.image %>"/></a>
</th>
</tr>
</table>
<% ConnectionClassGuitarItems.guitar = guitar.name;%>//newly added code
<% } %>
</asp:Content>
代码2 - 这里也是ConnectionClassGuitarItems的代码。现场吉他从上面得到的价值。它将补充List GetGuitarItems()方法,以便识别要检索的吉他产品。
public static string guitar;
public static List<guitarItem> GetGuitarItems()
{
List<guitarItem> list2 = new List<guitarItem>();
BrandsDBEntities obj2 = new BrandsDBEntities();
list2 = (from g in obj2.guitarItems where g.brand == guitar select g).ToList();
return list2;
}
代码3 - 现在这里是用于显示吉他产品的aspx.cs代码。这是我将检索到的产品存储在名为List guitarItemList的另一个字段中的位置,以便我可以在其aspx页面中对其进行补充。
public partial class Pages_GuitarItems1 : System.Web.UI.Page
{
public List<guitarItem> guitarItemList { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
guitarItemList = new List<guitarItem>();
guitarItemList = ConnectionClassGuitarItems.GetGuitarItems();
}
}
代码4 - 最后这里是用于显示吉他产品的aspx代码。
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master"
AutoEventWireup="true" CodeFile="GuitarItems1.aspx.cs"
Inherits="Pages_GuitarItems1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<% foreach (guitarItem gItem in guitarItemList) { %>
<div class="one-two">
<img src="<%= gItem.itemimage1 %>"/>
<div class="content">
<div id="label"><%= gItem.brand %> <%= gItem.model %></div>
</div>
</div>
<% } %>
</asp:Content>
现在问题是 它没有根据其品牌展示合适的吉他产品。由于我只为每个品牌制作了一个网页,因此它只显示ESP吉他产品。例如,如果我点击Ibanez徽标,它应该显示Ibanez产品。但在这种情况下,当我点击Ibanez标志时,它将显示ESP吉他产品。与其他品牌标识相同,当我点击它时,它只会显示ESP吉他产品。我实施的新代码出了什么问题?
根据我的理解,foreach循环将依次按顺序迭代吉他品牌(Ibanez,Fender,Gibson,PRS,Musicman和ESP)。请帮助我解决这个问题。我已经尝试了几种变体,但它仍然具有相同的结果。
答案 0 :(得分:0)
我认为问题出在您在ConnectionClassGuitarItems类中使用的静态字段&#39; guitar&#39;中。为什么不在显示所有吉他的网页中将吉他品牌作为查询字符串参数传递? - 然后按如下方式修改ConnectionClassGuitarItems:
public static List<guitarItem> GetGuitarItems(string brand)
{
List<guitarItem> list2 = new List<guitarItem>();
BrandsDBEntities obj2 = new BrandsDBEntities();
list2 = (from g in obj2.guitarItems where g.brand == brand select
g).ToList();
return list2;
}
然后页面应该将从查询字符串中检索到的品牌传递给上面的方法,以获取吉他项目,如下所示:
public partial class Pages_GuitarItems1 : System.Web.UI.Page
{
public List<guitarItem> guitarItemList { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
var brand = this.Request.QueryString["brand"];
guitarItemList = new List<guitarItem>();
guitarItemList = ConnectionClassGuitarItems.GetGuitarItems(brand);
}
}