我有一个购物车,目前的目录页面允许用户添加重复的项目,只要包含已经在购物车中的内容的总数量低于最大值。这不是问题,问题是在购物车中,用户可以更改数量,如果有重复的项目,可以超过最大值。
我想要一个方法,可以在文本更改事件上添加重复值的值。
当我使用我为其他页面创建的方法时遇到问题。添加时,将获取购物车中购物车中具有重复项的总数量,并将其添加到用户添加的新数量中,这会使结果发生偏差。
以下是提到的方法:
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;
}
}
有助于我尝试添加的任何其他信息。
答案 0 :(得分:0)
使用@JimMischel提供的新逻辑,我发现问题是我只查找表的总和,而不是实时变量的总和。 我要解决的问题是在调用之前添加更新调用以检查数量是否超过最大值。这样,表格中的数量与网站上的内容保持同步。