使用在列表视图内的文本框中输入的新值进行验证

本文关键字:输入 新值进 验证 文本 列表 视图 | 更新日期: 2023-09-27 18:12:55

我正在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);
    }
}

更新- Listview标记

<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>

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

使用在列表视图内的文本框中输入的新值进行验证

你的代码工作得很好。我对它进行了测试,并在后面的代码中获得了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();
        }