0

我使用中继器在网上商店展示一些产品,用于学校项目。这是前端与中继器的外观

<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 上添加,以便在触发按钮(图像/链接)之一时调用它。这对于 commandnameAddToCartViewIndividProd. 但是,我想存储由特定按钮调用的特定项目的 productid。在我现在的情况下,它一次只将一个 productid 存储在 arraylist 中,并且在单击另一个链接按钮时“忘记”先前存储的 productid。

问题我如何做到这样,每次触发中继器中的链接按钮时,它都会记住与被触发的链接按钮相关的 productid 并将这些 id 保存到 arraylist 中?这就是后端的样子

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());
}

您的反馈将不胜感激。

4

2 回答 2

0

您需要了解Asp.net Page 的生命周期

每次请求都会创建一个 Page 对象的新实例。您输入的值将填充到其中。

您的数组列表每次都会重新创建。如果您希望这些值保持不变,则必须将您的数组列表存储ViewStateSession

参考:如何:在视图状态中保存值

  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.
  }
于 2013-06-14T09:16:54.287 回答
0

我们可以将逗号分隔或 JSON 值存储在 Session 或隐藏变量中(如果您在同一页面上并在不同的选项卡中打开新页面,那么我们也可以使用隐藏变量)。因此,每次单击按钮时,我们都可以附加产品 ID。

于 2013-06-14T09:19:42.430 回答