在Repeater中触发不同的链接按钮,并将每个链接按钮的值保存在数组列表中



我使用一个中继器在一个学校项目的在线商店中显示一些产品。这是使用中继器

的前端的样子
<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,以便在触发其中一个按钮(图像/链接)时调用它。这对于命令名AddToCartViewIndividProd都非常有效。但是,我想存储由特定按钮调用的特定项目的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对象的新实例。输入的值将被填充到其中。

你的数组列表每次都被重新创建。如果您想要保存这些值,则必须将数组列表存储在ViewStateSession

中。

参考:如何:在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

相关内容

  • 没有找到相关文章

最新更新