nopSolutions/nopCommerce · warning · Exception
Your cart is empty
Error message
Your cart is empty
What it means
Thrown in EditAddressAsync (billing/shipping address edit) when the customer's shopping cart for the current store has no items. The factory loads cart via GetShoppingCartAsync(ShoppingCart); if cart.Any() is false it throws Exception("Your cart is empty"). The catch at line 304 logs a warning and returns JSON { error = 1 }. It prevents address editing when there is nothing to check out, e.g., after the cart expired or was emptied in another tab.
Source
Thrown at src/Presentation/Nop.Web/Controllers/CheckoutController.cs:284
}
protected virtual async Task<JsonResult> EditAddressAsync(AddressModel addressModel, IFormCollection form, Func<Customer, IList<ShoppingCartItem>, Address, Task<JsonResult>> getResult)
{
try
{
if (!ModelState.IsValid)
{
var errors = string.Join(", ", ModelState.Values.Where(p => p.Errors.Any()).SelectMany(p => p.Errors)
.Select(p => p.ErrorMessage));
throw new Exception(errors);
}
var customer = await _workContext.GetCurrentCustomerAsync();
var store = await _storeContext.GetCurrentStoreAsync();
var cart = await _shoppingCartService.GetShoppingCartAsync(customer, ShoppingCartType.ShoppingCart, store.Id);
if (!cart.Any())
throw new Exception("Your cart is empty");
//find address (ensure that it belongs to the current customer)
var address = await _customerService.GetCustomerAddressAsync(customer.Id, addressModel.Id)
?? throw new Exception("Address can't be loaded");
//custom address attributes
var customAttributes = await _addressAttributeParser.ParseCustomAttributesAsync(form, NopCommonDefaults.AddressAttributeControlName);
var customAttributeWarnings = await _addressAttributeParser.GetAttributeWarningsAsync(customAttributes);
if (customAttributeWarnings.Any())
return Json(new { error = 1, message = customAttributeWarnings });
address = addressModel.ToEntity(address);
address.CustomAttributes = customAttributes;
await _addressService.UpdateAddressAsync(address);
return await getResult(customer, cart, address);
View on GitHub (pinned to 64bdf2ff08)
Solutions
- Refresh the checkout page so the cart is reloaded; if empty, add products again before editing the address.
- Ensure the customer is browsing the correct store and cart cookie is intact.
- Return a localized 'cart empty' message and redirect to the cart page instead of a generic JSON error.
- Check that cart-merging on login is enabled if the issue appears after login.
Example fix
// before
if (!cart.Any())
throw new Exception("Your cart is empty");
// after (localized, with redirect hint)
if (!cart.Any())
throw new Exception(await _localizationService.GetResourceAsync("ShoppingCart.CartIsEmpty")); Defensive patterns
Strategy: validation
Validate before calling
// Check cart presence before allowing the address edit POST.
var cart = await _shoppingCartService.GetShoppingCartAsync(customer, ShoppingCartType.ShoppingCart, store.Id);
if (!cart.Any())
return Json(new { error = 1, message = "Your cart is empty", redirect = Url.RouteUrl(NopRouteNames.General.CART) }); Try / catch
// Already wrapped by EditAddressAsync's catch; returns JSON error.
catch (Exception exc) { return Json(new { error = 1, message = exc.Message }); } Prevention
- Disable address-edit controls when the cart is empty.
- Ensure cart merging on login is enabled to avoid empty carts after login.
- Watch for multi-tab checkout where one tab completes the order first.
When it happens
Trigger: Customer submits an address edit during checkout but their ShoppingCart-type cart for the current store is empty. Triggered by the cart being emptied/expired in another session, a store mismatch, or completing checkout in a second tab before editing the address here.
Common situations: Cart expired (session/cookie) or cleared in another tab; customer already placed the order elsewhere; multi-store cookie confusion; guest-to-registered conversion that reset the cart; AB-testing/return-visitor with a stale checkout page.
Related errors
- Cart is empty
- Order payment info not found
- Address can't be loaded
- Shipping is not required
- Payment information is not entered
AI-assisted analysis of nopSolutions/nopCommerce@64bdf2ff08 (2026-08-13).
Data as JSON: /api/errors/ed2f2b45109ac1c0.
Report an issue: GitHub.