我正在使用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>
我唯一的问题是我需要从文本框中获取价值。
答案 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();
}