我使用一个中继器在一个学校项目的在线商店中显示一些产品。这是使用中继器
的前端的样子<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="rptList_ItemCommand">
<ItemTemplate>
<span style="float:left; padding:25px;" class="backgrnd">
<asp:ImageButton ID="imgProd" runat="server" style="width:150px; height:150px;" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "productImg")%>' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "productID")%>' CommandName="ViewIndividProd"/><br />
<p style="clear:left;">
<asp:Label ID="lbName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "productName")%>' /><br />
<asp:Label ID="lbUnitPrice" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "unitPrice")%>'/><br />
<asp:Label ID="lbRatings" runat="server" Text=''>Ratings</asp:Label><br />
<asp:LinkButton ID="linkCart" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "productID")%>' CommandName="AddToCart">Add to Cart</asp:LinkButton>
</p>
</span>
</ItemTemplate>
</asp:Repeater>
正如您所看到的,我在Repeater标签中添加了OnItemCommand,以便在触发其中一个按钮(图像/链接)时调用它。这对于命令名AddToCart
和ViewIndividProd
都非常有效。但是,我想存储由特定按钮调用的特定项目的productid。在我的情况下,现在,它只存储一个产品在数组列表中的时间和"忘记"以前存储的产品当另一个链接按钮被点击。
问题我如何使它这样,每次在中继器中的链接按钮被触发,它记住属于被触发的链接按钮的productid,并将这些id保存到数组列表?这是后端看起来的样子
ArrayList cart = new ArrayList();
protected void rptList_ItemCommand(object sender, RepeaterCommandEventArgs e) {
if (e.CommandName == "ViewIndividProd") {
Session["productID"] = e.CommandArgument.ToString();
Response.Redirect("IndividProduct.aspx");
}
if (e.CommandName == "AddToCart") {
string prodid = e.CommandArgument.ToString();
cart.Add(prodid);
Session["ShoppingCart"] = cart;
Response.Redirect("IndividCat.aspx");
}
msg.Text = "Shopping cart: " + String.Join(",", cart.ToArray());
}
您需要了解Asp.net Page的生命周期。
每次请求都创建Page对象的新实例。输入的值将被填充到其中。
你的数组列表每次都被重新创建。如果您想要保存这些值,则必须将数组列表存储在ViewState
或Session
参考:如何:在viewstate中保存值
void Page_Load(object sender, EventArgs e)
{
if (ViewState["arrayListInViewState"] != null)
{
PageArrayList = (ArrayList)ViewState["arrayListInViewState"];
}
else
{
// ArrayList isn't in view state, so we need to create it from scratch.
PageArrayList = CreateArray();
}
// Code that uses PageArrayList.
}
我们可以在会话或隐藏变量中存储逗号分隔或JSON值(如果您在同一页面上并在不同选项卡中打开新页面,那么我们也可以使用隐藏变量)。每次点击按钮我们都可以添加产品id