I have four dropdownlists, for three of them data is provided by json. Two are working properly (first two) the other are not. I was looking for errors for couple of hours and I don't see it. I may be tired or I need more dioptries to my glasses :)
 
View
- <div class="col-3">  
 -                     <select id="HazClass" class="form-control border-danger" asp-items="@Model.HazardClasses" >  
 -                         <option value="">--Select Hazard Class--</option>  
 -                     </select>  
 -                     <span asp-validation-for="PTWHazId.HazClass" class="text-danger"></span>  
 -                     <input hidden asp-for="PTWHazId.HazClass" id="hazClass" />  
 -                 </div>  
 -   
 -                 <div class="col-3">  
 -                     <select id="HazDetail" class="form-control border-danger" asp-items="@(new SelectList(string.Empty, "IdH", "HazDetail"))" >  
 -                         <option value="">--Select Hazard Detail--</option>  
 -                     </select>  
 -                     <span asp-validation-for="PTWHazId.HazDetails" class="text-danger"></span>  
 -                     <input hidden asp-for="PTWHazId.HazDetails" id="hazDetail" />  
 -                 </div>  
 -                 <div class="col-3">  
 -                     <select id="ConClass" class="form-control border-danger" asp-items="@(new SelectList(string.Empty, "IdCC", "ConClass"))" >  
 -                         <option value="">--Select Control Class--</option>  
 -                     </select>  
 -                     <span asp-validation-for="PTWHazId.ConClass" class="text-danger"></span>  
 -                     <input hidden asp-for="PTWHazId.ConClass" id="conClass" />  
 -                 </div>  
 -                 <div class="col-3">  
 -                     <select id="ConDetail" class="form-control border-danger" asp-items="@(new SelectList(string.Empty, "IdCC", "ConDetail"))" onchange="func4()">  
 -                         <option value="">--Select Control Details--</option>  
 -                     </select>  
 -                     <span asp-validation-for="PTWHazId.ConDetail" class="text-danger"></span>  
 -                     <input hidden asp-for="PTWHazId.ConDetail" id="conDetail" />  
 -                 </div>  
 
json
 
- HazardClasses = await _context.HazardClasses.Include(s => s.HazardSource).Where(s => s.HazardSource.OrgID == orgid && s.HazardSource.HazSource == "Process").Select(a =>  
 -                                         new SelectListItem  
 -                                         {  
 -                                             Value = a.IdHC.ToString(),  
 -                                             Text = a.HazClass  
 -                                         }).ToListAsync();  
 -   
 - .............  
 -           
 -           
 -         public async Task<JsonResult> OnGetHazDetailAsync(string id)  
 -         {  
 -             var hazDetails = await _context.HazardDetails.Where(s => s.IdHC == id).ToListAsync();  
 -   
 -             return new JsonResult(new SelectList(hazDetails, "IdH", "HazDetail"));  
 -         }  
 -         public async Task<JsonResult> OnGetControlClassAsync(string id)  
 -         {  
 -             var conClass = await _context.ControlClasses.Where(s => s.IdH == id).ToListAsync();  
 -   
 -             return new JsonResult(new SelectList(conClass, "IdCC", "ConClass"));  
 -         }  
 -         public async Task<JsonResult> OnGetControlDetailAsync(string id)  
 -         {  
 -             var conDetails = await _context.ControlClasses.Where(s => s.ConClass == id).ToListAsync();  
 -   
 -             return new JsonResult(new SelectList(conDetails, "IdCC", "ConDetail"));  
 -         }  
 
javascript
 
- $(function () {  
 -     $("#HazClass").on("change", function () {  
 -         var categoryId = $(this).val();  
 -         $("#HazDetail").empty();  
 -         $("#HazDetail").append("<option value=''>--Select Hazard Detail--</option>");  
 -         $.getJSON(`?handler=HazDetail&id=${categoryId}`, (data) => {  
 -             $.each(data, function (i, item) {  
 -                 $("#HazDetail").append(`<option value="${item.value}">${item.text}</option>`);  
 -             });  
 -         });  
 -   
 -         var data = $("#HazClass :selected").text();  
 -         $("#hazClass").val(data);  
 -     });  
 - });  
 - $(function () {  
 -     $("#HazDetail").on("change", function () {  
 -         var categoryId = $(this).val();  
 -         $("#ConClass").empty();  
 -         $("#ConClass").append("<option value=''>--Select Control Class--</option>");  
 -         $.getJSON(`?handler=ControlClass&id=${categoryId}`, (data) => {  
 -             $.each(data, function (i, item) {  
 -                 $("#ConClass").append(`<option value="${item.value}">${item.text}</option>`);  
 -             });  
 -         });  
 -   
 -         var data = $("#HazDetail :selected").text();  
 -         $("#hazDetail").val(data);  
 -     });  
 - });  
 - $(function () {  
 -     $("#ConClass").on("change", function () {  
 -         var data = $("#ConClass :selected").text();  
 -         var categoryId = data;  
 -         $("#ConDetail").empty();  
 -         $("#ConDetail").append("<option value=''>--Select Control Detail--</option>");  
 -         $.getJSON(`?handler=ControlDetail&id=${categoryId}`, (data) => {  
 -             $.each(data, function (i, item) {  
 -                 $("#ConDetail").append(`<option value="${item.value}">${item.text}</option>`);  
 -             });  
 -         });  
 -   
 -         var data = $("#ConClass :selected").text();  
 -         $("#conClass").val(data);  
 -     });  
 - });