0

我正在尝试使用 Devart LinqConnect(Linq-to-Mysql) 在 asp.net C# 和 Mysql 中制作购物车 Web 应用程序。

I have Categories in a hierarchy when a select an category is displays the corresponding products in the ShowProducts.aspx page. 我添加了一个从查询字符串值中获取数据的数据列表。

我已分配给每个类别,例如在男士下的类别衬衫上,我已将 Id 分配给超链接,例如

<li><a href="ShowProducts.aspx?id=8">Mens</a><span class="rarrow">&#9654;</span>
                        <ul class="sub2">
                            <li><a href="ShowProducts.aspx?id=9">Shirts</a></li>

当它被传递到其他页面 ShowProducts.aspx As ShowProducts.aspX?id=9时,它会在 Datalist 中显示产品列表。由于它是购物车应用程序,当我单击按钮而不是添加会话购物车对象时,我有一个添加到购物车按钮它给了我一个错误:

指数数组的边界之外。int ProductID = Convert.ToInt32(DataListProducts.DataKeyField[RowClicked]);

这是我在 Datalist Item 命令中的代码。

  protected void DataListProducts_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName == "AddToCart")
        {
            int RowClicked = Convert.ToInt32(e.CommandArgument);
            int ProductID = Convert.ToInt32(DataListProducts.DataKeyField[RowClicked]);
            List<int> ProductsInCart = (List<int>)Session["Cart"];

            if (ProductsInCart == null)
            {

                ProductsInCart = new List<int>();
            }

            ProductsInCart.Add(ProductID);
            Session["Cart"] = ProductsInCart;
        }
    }

这是我在 ShowProducts.aspx 中的 DataBindings:

 <asp:LinqDataSource ID="LinqDataSourceProducts" runat="server" ContextTypeName="ShoppingContext.ShoppingDataContext"
    EntityTypeName="" Select="new (ProductName, ProductUnitPrice, ProductBrand, Category, ParentID, ProductImage, ProductID)"
    TableName="Products" Where="ParentID == @ParentID1">
    <WhereParameters>
        <asp:QueryStringParameter DefaultValue="0" Name="ParentID1" QueryStringField="id"
            Type="Int64" />
    </WhereParameters>
</asp:LinqDataSource>
<asp:DataList ID="DataListProducts" runat="server" DataSourceID="LinqDataSourceProducts" 
    RepeatDirection="Horizontal" RepeatColumns="4" 
Style="margin-left: 87px" CellSpacing="50"
    CellPadding="50" onitemcommand="DataListProducts_ItemCommand">
    <ItemTemplate>
        <table style="border:5px dotted #c0c0c0">
            <tr>
                <td>
                    <asp:ImageButton ID="ImageButton1" ImageUrl='<%# GetImage(Eval("ProductImage")) %>'
                        runat="server" Width="250px" Height="270px" />
                    <br />
                    <center>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ProductID") %>'></asp:Label>
                        <asp:Label ID="LabelProductName" runat="server" Text='<%# Eval("ProductName") %>'></asp:Label><hr />
                    </center>
                    By : &nbsp;<b><asp:Label ID="Label2" runat="server" Text='<%# Eval("ProductBrand") %>'></asp:Label></b><br />
                    <asp:Button ID="ButtonAddToCart" runat="server" Text="Add To Cart" CommandName="AddToCart" CommandArgument='<%# Eval("ProductID") %>'
                        Style="padding-top: 3px; left: 5px" />
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:DataList>

请任何人对此有答案...请帮助..

4

1 回答 1

2

传递给 Convert.ToInt32 的值之一不是数字,使其失败

e.CommandArgument.ToString()
or
DataListProducts.DataKeyField[RowClicked]
于 2013-03-17T19:25:54.210 回答