使用在listview内的文本框中输入的新值进行验证

时间:2016-10-12 13:53:36

标签: c# asp.net listview

我正在使用asp.net C#开发电子商务网站。在我的购物车页面中,我已选择在每个产品上添加礼券。购物车页面成功加载后,用户可以在每个产品上输入凭证代码,然后在表格中检查。如果该特定产品ID存在优惠券代码,那么它将被应用。我尝试使用代码从文本框中获取值。但是用户输入的值没有得到。

OnListviewItemCommand我使用了以下内容。

if (e.CommandName == "apply code") {
    try {
        int id = e.CommandArgument;
        TextBox coupon = (TextBox)e.Item.FindControl("itemCoupon");
        Label productID = (Label)e.Item.FindControl("item_ID");
        string couponDiscount = "0";

        string couponCode = string.Empty;
        string itemID = string.Empty;
        try {
            if (!string.IsNullOrEmpty(coupon.Text) & !string.IsNullOrEmpty(productID.Text)) {
                string str = "SELECT * FROM coupons WHERE code IN('" + coupon.Text + "') and item_ID IN('" + productID.Text + "')";
                MySqlCommand cmd = new MySqlCommand(str, con);
                con.Open();
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                con.Close();
                couponCode = ds.Tables(0).Rows(0)("coupon_code");
                itemID = ds.Tables(0).Rows(0)("item_ID");
                if (ds.Tables(0).Rows.Count > 0) {
                    if (couponCode == coupon.Text && itemID == productID.Text) {
                        couponDiscount = ds.Tables(0)("coupon_discount").ToString;
                    } else {
                        couponDiscount = "0";
                    }

                }
            }

        } catch (Exception ex) {
        }
    } catch (Exception ex) {
        Response.Write(ex);
    }
}

更新 - 列表视图标记

<asp:ListView ID="cartItemsList" runat="server" DataKeyNames="item_ID">
                            <ItemTemplate>
                                <tr>
                                    <td class="my-item">
                                        <div class="item-pic">
                                            <asp:Image ID="itmPic" runat="server" ImageUrl='<%# Eval("item_pic") %>' />
                                        </div>

                                        <div class="item-details">
                                            <asp:Label ID="itemName" runat="server" Text='<%# Eval("item_name") %>' CssClass="item-name"></asp:Label>
                                            <div class="single-redeem">
                                                <asp:TextBox ID="itemCoupon" runat="server"></asp:TextBox> 
                                                <asp:LinkButton ID="itemRedeemButton" runat="server" Text="apply" placeholder="Promo Code" CommandArgument='<%# Eval("item_ID") %>' CommandName="apply code"></asp:LinkButton>
                                            </div>
                                        </div>
                                    </td>
                                </tr>
                            </ItemTemplate>
                        </asp:ListView>

我唯一的问题是我需要从文本框中获取价值。

1 个答案:

答案 0 :(得分:0)

您的代码运行正常。我测试了它,我在后面的代码中得到了TextBox的值。也许问题出在数据库连接/查询中? 下面简化的代码段不是解决方案,但为了向您展示它确实有效。

    <asp:ListView ID="ListView1" runat="server" OnItemCommand="ListView1_ItemCommand">
        <ItemTemplate>
            <asp:Button ID="Button1" runat="server" Text="Button" CommandName="apply code" CommandArgument='<%# Eval("itemID") %>' />
            <asp:TextBox ID="itemCoupon" runat="server"></asp:TextBox>
            <asp:Label ID="item_ID" runat="server" Text='<%# Eval("itemID") %>'></asp:Label>
        </ItemTemplate>
    </asp:ListView>

    protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        if (e.CommandName == "apply code")
        {
            TextBox coupon = (TextBox)e.Item.FindControl("itemCoupon");
            Label productID = (Label)e.Item.FindControl("item_ID");

            if (!string.IsNullOrEmpty(coupon.Text) & !string.IsNullOrEmpty(productID.Text))
            {
                //this works
                Response.Write(coupon.Text + "___" + productID.Text);
            }
        }
    }

只需确保在IsPostBack支票中绑定ListView数据。

        if (!IsPostBack)
        {
            ListView1.DataSource = yourSource;
            ListView1.DataBind();
        }