【发布时间】:2013-09-23 16:21:30
【问题描述】:
我有一个购物车,目前目录页面允许用户添加重复的商品,只要包括购物车中已有商品在内的总数量低于最大值。这不是问题,问题是在购物车中,用户可以更改数量,如果有重复商品,则可以超过最大值。
我想要一个可以在文本更改事件上添加重复值的值的方法。
当我使用我为其他页面创建的方法时,我遇到了问题。添加时,会将购物车中存在重复的商品的总数量添加到用户添加的新数量中,这会导致结果倾斜。
这里是提到的方法:
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;
}
}
任何可以帮助我的附加信息都可以尝试添加。
【问题讨论】:
-
与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
-
您是否设置了断点并单步计算数量以确保它给您正确的数字?另外,我认为您可以使用
var qty = shoppingList.Where(item => item.ProductId == ProductID).Sum(item => item.Quantity);之类的方式简化逻辑 -
@JimMischel 谢谢你的那句话!它没有解决我的问题,但它确实使代码更容易理解。我正在更新我的问题以及关于我发现的更多信息。
标签: c# asp.net duplicates