One of the most frustrating thing for online shoppers is to place an order on an e-commerce store site and receiving an email that the order has been cancelled because product is out of stock. This can certainly affect the sales / revenue because an angry customer (or online shopper) is never coming back to the store site. In order to avoid this kind of confusion (or frustration) and eventually losing a customer, it is always a good idea for store owners to display "Out of stock" message if a product is not available.
Today, we will go over the process of adding an "out of stock" message on product box in nopCommerce.
Go to: Nop.Web/Views/Shared/_ProductBox.cshtml

Open "_ProductBox.cshtml" file and add this at the top of your view code:
@using Nop.Services.Catalog;
So, the top of your view code should look like this:
@model ProductOverviewModel@using Nop.Core@using Nop.Core.Domain.Orders@using Nop.Core.Domain.Tax@using Nop.Core.Infrastructure@using Nop.Web.Models.Catalog;@using Nop.Services.Catalog;
Now, add this line (at the top):
var productQuantity = EngineContext.Current.Resolve<IProductService>().GetProductById(Model.Id).StockQuantity;
Like this:
@model ProductOverviewModel@using Nop.Core@using Nop.Core.Domain.Orders@using Nop.Core.Domain.Tax@using Nop.Core.Infrastructure@using Nop.Web.Models.Catalog;@using Nop.Services.Catalog;@{ //prepare "Add to cart" AJAX link string addtocartlink = ""; var shoppingCartTypeId = (int)ShoppingCartType.ShoppingCart; var quantity = 1; if (Model.ProductPrice.ForceRedirectionAfterAddingToCart) { addtocartlink = Url.RouteUrl("AddProductToCart-Catalog", new { productId = Model.Id, shoppingCartTypeId = shoppingCartTypeId, quantity = quantity, forceredirection = Model.ProductPrice.ForceRedirectionAfterAddingToCart }); } else { addtocartlink = Url.RouteUrl("AddProductToCart-Catalog", new { productId = Model.Id, shoppingCartTypeId = shoppingCartTypeId, quantity = quantity }); } var addtowishlistlink = Url.RouteUrl("AddProductToCart-Catalog", new { productId = Model.Id, shoppingCartTypeId = (int)ShoppingCartType.Wishlist, quantity = quantity }); var addtocomparelink = Url.RouteUrl("AddProductToCompare", new { productId = Model.Id }); <!-- To add "Out of stock" message --> var productQuantity = EngineContext.Current.Resolve<IProductService>().GetProductById(Model.Id).StockQuantity;}
As per your requirement (where you would like to display the "Out of stock" message), simple add the following code:
@if (productQuantity < 1) { <div id="out-of-stock-div" style="border: dashed 2px gray; height:25px; text-align:center;"> <span class="out-of-stock">Out of Stock</span> </div> }
For this example, the code should look like this:
@model ProductOverviewModel@using Nop.Core@using Nop.Core.Domain.Orders@using Nop.Core.Domain.Tax@using Nop.Core.Infrastructure@using Nop.Web.Models.Catalog;@using Nop.Services.Catalog;@{ //prepare "Add to cart" AJAX link string addtocartlink = ""; var shoppingCartTypeId = (int)ShoppingCartType.ShoppingCart; var quantity = 1; if (Model.ProductPrice.ForceRedirectionAfterAddingToCart) { addtocartlink = Url.RouteUrl("AddProductToCart-Catalog", new { productId = Model.Id, shoppingCartTypeId = shoppingCartTypeId, quantity = quantity, forceredirection = Model.ProductPrice.ForceRedirectionAfterAddingToCart }); } else { addtocartlink = Url.RouteUrl("AddProductToCart-Catalog", new { productId = Model.Id, shoppingCartTypeId = shoppingCartTypeId, quantity = quantity }); } var addtowishlistlink = Url.RouteUrl("AddProductToCart-Catalog", new { productId = Model.Id, shoppingCartTypeId = (int)ShoppingCartType.Wishlist, quantity = quantity }); var addtocomparelink = Url.RouteUrl("AddProductToCompare", new { productId = Model.Id }); <!-- To add "Out of stock" message --> var productQuantity = EngineContext.Current.Resolve<IProductService>().GetProductById(Model.Id).StockQuantity;}<!-- To add "Out of stock" message --> @if (productQuantity < 1) { <div id="out-of-stock-div" style="border: dashed 2px gray; height:25px; text-align:center;"> <span class="out-of-stock">Out of Stock</span> </div> } <!-- To add "Out of stock" message --><div class="product-item" data-productid="@Model.Id"> <div class="picture"> <a href="@Url.RouteUrl("Product", new { SeName = Model.SeName })" title="@Model.DefaultPictureModel.Title"> <img alt="@Model.DefaultPictureModel.AlternateText" src="@Model.DefaultPictureModel.ImageUrl" title="@Model.DefaultPictureModel.Title" /> </a> </div>
Save changes!
In order to test:
1) Go to administration section and change the quantity of any product to 0
2) Go to public store and order the category of that specific product
Here is the result:

Thank you so much.
The code in this tutorial is for nopCommerce 3.70. If you are using a difference version, you may have to change / update the code accordingly.