javascriptjqueryajaxasp.net-mvcjquery-ajaxq

How to get a list from mvc controller to view using jquery ajax


I need to get a list from mvc controller to view using jquery ajax. how can i do that. this is my code. Its alerting error message.

In Controller

 public class FoodController : Controller
    {
       [System.Web.Mvc.HttpPost]
        public IList<Food> getFoodDetails(int userId)
        {
            IList<Food> FoodList = new List<Food>();

                FoodList = FoodService.getFoodDetails(userId);

                return (FoodList);
        }
    }

In view

function GetFoodDetails() {
        debugger;
        $.ajax({
            type: "POST",
            url: "Food/getFoodDetails",
            data: '{userId:"' + Id + '"}',
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            success: function (result) {
                debugger;
                alert(result)
            },
            error: function (response) {
                debugger;
                alert('eror');
            }
        });

    }

enter image description here


Solution

  • Why you use HttpPost for GET-method? And need return JsonResult.

    public class FoodController : Controller
    {
    
        public JsonResult getFoodDetails(int userId)
        {
            IList<Food> FoodList = new List<Food>();
    
            FoodList = FoodService.getFoodDetails(userId);
    
            return Json (new{ FoodList = FoodList }, JsonRequestBehavior.AllowGet);
        }
    }
    
    
    function GetFoodDetails() {
        debugger;
        $.ajax({
            type: "GET",
            url: "Food/getFoodDetails",
            data: { userId: Id },
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            success: function (result) {
                debugger;
                alert(result)
            },
            error: function (response) {
                debugger;
                alert('eror');
            }
        });
    
    }