nopSolutions/nopCommerce · warning · ArgumentException
No category found with the specified id
Error message
No category found with the specified id
What it means
Thrown by CategoryController.ProductList (permission: CATEGORIES_VIEW). The product-grid datasource loads the parent category by searchModel.CategoryId and throws ArgumentException if absent. The category was deleted or the id is invalid for the current scope.
Source
Thrown at src/Presentation/Nop.Web/Areas/Admin/Controllers/CategoryController.cs:464
}
catch (Exception exc)
{
await _notificationService.ErrorNotificationAsync(exc);
return RedirectToAction("List");
}
}
#endregion
#region Products
[HttpPost]
[CheckPermission(StandardPermission.Catalog.CATEGORIES_VIEW)]
public virtual async Task<IActionResult> ProductList(CategoryProductSearchModel searchModel)
{
//try to get a category with the specified id
var category = await _categoryService.GetCategoryByIdAsync(searchModel.CategoryId)
?? throw new ArgumentException("No category found with the specified id");
//prepare model
var model = await _categoryModelFactory.PrepareCategoryProductListModelAsync(searchModel, category);
return Json(model);
}
[CheckPermission(StandardPermission.Catalog.CATEGORIES_CREATE_EDIT_DELETE)]
public virtual async Task<IActionResult> ProductUpdate(CategoryProductModel model)
{
//try to get a product category with the specified id
var productCategory = await _categoryService.GetProductCategoryByIdAsync(model.Id)
?? throw new ArgumentException("No product category mapping found with the specified id");
//fill entity from product
productCategory = model.ToEntity(productCategory);
await _categoryService.UpdateProductCategoryAsync(productCategory);
View on GitHub (pinned to 64bdf2ff08)
Solutions
- Reopen the category from the list so the product grid references a current CategoryId.
- Return an empty product list instead of throwing when the parent category is missing.
- Audit client-side code that may retain a stale CategoryId across navigation.
Example fix
// before
var category = await _categoryService.GetCategoryByIdAsync(searchModel.CategoryId)
?? throw new ArgumentException("No category found with the specified id");
// after
var category = await _categoryService.GetCategoryByIdAsync(searchModel.CategoryId);
if (category == null)
return Json(new CategoryProductListModel());
Defensive patterns
Strategy: validation
Validate before calling
// Validate category exists before listing its products. var category = await _categoryService.GetCategoryByIdAsync(searchModel.CategoryId); if (category == null) return Json(new CategoryProductListModel());
Type guard
static bool CategoryExists(Category c) => c is not null;
Try / catch
try { /* ProductList body */ }
catch (ArgumentException ex) when (ex.Message.Contains("category"))
{
return Json(new CategoryProductListModel());
} Prevention
- Reopen the category from the list before viewing products.
- Return an empty grid for a missing parent instead of throwing.
- Avoid stale CategoryId in client-side state.
When it happens
Trigger: POST ProductList with a CategoryId that GetCategoryByIdAsync cannot find — parent category removed while its product tab was open, or a stale/tampered id.
Common situations: Concurrent catalog edits; category deleted in another tab; UI caching an old CategoryId after navigation.
Related errors
- No address attribute found with the specified id
- No affiliate found with the specified id
- No product category mapping found with the specified id
- No checkout attribute found with the specified id
- No contact form attribute found with the specified id
AI-assisted analysis of nopSolutions/nopCommerce@64bdf2ff08 (2026-08-13).
Data as JSON: /api/errors/eb5b0c10371884e9.
Report an issue: GitHub.