source

MVC 컨트롤러에서 개체 목록과 함께 JsonResult 반환

lovecheck 2023. 8. 20. 11:58
반응형

MVC 컨트롤러에서 개체 목록과 함께 JsonResult 반환

MVC 컨트롤러에 간단한 방법이 있습니다.

[HttpPost]
public JsonResult GetAreasForCompany(int companyId)
{
   var areas = context.Areas.Where(x => x.Company.CompanyId == companyId).ToList();
   return Json(areas);
}

다음은 영역 객체입니다.

public class Area
{
    public int AreaId { get; set; }

    [Required]
    public string Title { get; set; }
    public bool Archive { get; set; }

    public virtual Company Company { get; set; }
}

그리고 내가 보기에 그 방법은 다음과 같습니다.

$.ajax({
    url: '@Url.Action("GetAreasForCompany")',
    type: 'POST',
    async: false,
    data: "{'companyId': " + companyId + "}",
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    error: function () {
        alert("Server access failure!");
    },
    success: function (result) {
        response = result;
    }
});

컨트롤러에서 메소드를 확인해보니 Area 객체의 목록이 생성됩니다.뷰에서 메소드를 호출할 때 내부 서버 500 오류가 발생하는 이유를 알고 계십니까?다른 항목(Dictionary 개체 등)을 반환하면 모든 것이 정상적으로 작동합니다. 영역 목록을 Json으로 변환하려고 할 때 오류가 발생합니다.

수업 이후Area포함하다Company그리고.Company의 컬렉션을 포함합니다.AreaJSON 직렬화 프로그램에서 지원하지 않는 순환 참조가 개체 계층에 있을 수 있습니다.이 문제를 해결하려면 필요한 속성만 포함한 익명 개체를 반환합니다.

[HttpPost]
public JsonResult GetAreasForCompany(int companyId)
{
  var areas = context.Areas
    .Where(x => x.Company.CompanyId == companyId)
    .Select(a => new
    {
      AreaId = a.AreaId,
      Title = a.Title
    });
  return Json(areas);
}

목록 개체를 Json으로 반환(Jquery에도 유용)UI 및 Linkq 방법)

public ActionResult GetItemList()
{
    var search = Request.Params["term"];

    var itemList = (from items in db.TblItems where items.ItemName.StartsWith(search) select new { label = items.ItemName, value = items.ItemName }).ToList();

    return Json(itemList, JsonRequestBehavior.AllowGet);
}

언급URL : https://stackoverflow.com/questions/25402894/return-jsonresult-with-list-of-objects-from-mvc-controller

반응형