我有一个购物车,目前目录页面允许用户添加重复的商品,只要包括购物车中已有商品在内的总数量低于最大值。那不是问题,问题是在购物车中,用户可以更改数量,如果有重复商品,则可以超过最大值。
我想要一种可以在文本更改事件上添加重复值的值的方法。
当我使用为其他页面创建的方法时,我遇到了问题。添加时,它会将购物车中具有重复项的商品的总数量添加到用户添加的新数量中,这会使结果产生偏差。
这里是提到的方法:
public static bool getTotalQty(string sessionID, int ProductID, decimal Qty)
{
double maxQty = 0;
double totalQty = 0;
bool isQtyValid = true;
List<ShoppingCartDTO> shoppingList = ShoppingCart.Fetch(string.Format("WHERE SessionID='{0}'", sessionID));
foreach (ShoppingCartDTO temp in shoppingList)
{
var qty = shoppingList.Where(item => item.ProductID == ProductID).Sum(item => item.Quantity);
maxQty = getMax(ProductID);
isQtyValid = maxQty == 0 ? true : CheckMaxQty(totalQty, maxQty);
}
if (!isQtyValid)
break;
return isQtyValid;
}
编辑:添加新的 linq 后,我看到我的问题是总和是表中预先存在的数量,不排除它试图添加到总量中的值。所以我现在的问题是,我可以操纵 linq 语句在 qty_Changed 中工作,这样它就不会在表中查看它试图添加的值。因为它们不一定是最新的,因为文本框会是?
此方法中的两次调用只是检索最大值,然后比较找到的最大值和总数。
不确定您是否需要它,但这是我也有的文本更改事件:
public void qty_Changed(object sender, EventArgs e)
{
bool isQtyValid = true;
decimal qty = 0.0M;
int productID = 0;
int index = 0;
string sessionID = Session["ID"].ToString();
for (int x = 0; x < cart.Items.Count; x++)
{
RepeaterItem item = cart.Items[x];
TextBox qtyText = (TextBox)item.FindControl("TxtQty");
if (qtyText.Text != string.Empty)
{
qty = Convert.ToDecimal(qtyText.Text);
productID = Convert.ToInt32(((Label)item.FindControl("lblProductID")).Text);
isQtyValid = COMMONACES.GetValues.getTotalQty(sessionID, productID, qty, index);
}
((Label)item.FindControl("lblQtyOverMax")).Visible = !isQtyValid;
CheckOut.Enabled = isQtyValid;
lblError.Visible = !isQtyValid;
lblError.Text = isQtyValid ? string.Empty : "Your quantity for one or more items exceeds the maximum allowed. Please check the total quantity and make the needed adjustments.";
if (!isQtyValid)
break;
}
}
任何有助于我的附加信息都可以尝试添加。