2011-01-19 10 views
64

MVC에서 JSON 응답의 일부로 HTML 문자열을 반환하는 방법이 있습니까?MVC 부분 뷰를 JSON으로 반환

public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      if(Request.IsAjaxRequest() 
       return PartialView("NotEvil", model); 
      return View(model) 
     } 
     if(Request.IsAjaxRequest()) 
     { 
      return Json(new { error=true, message = PartialView("Evil",model)}); 
     } 
     return View(model); 
    } 

답변

102

이 스레드에 대한 답 유사한 PartialViewResult 개체에서 HTML 문자열을 추출 할 수 있습니다 :

Render a view as a string

모두 ViewResultBase에서 파생, 그래서 같은 방법에 작동합니다 PartialViewResult 및 ViewResult 양자 모두. 당신이 당신의 자바 스크립트에 결과를 잡을 수

public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     if(Request.IsAjaxRequest()) 
      return PartialView("NotEvil", model); 
     return View(model) 
    } 
    if(Request.IsAjaxRequest()) 
    { 
     return Json(new { error = true, message = RenderViewToString(PartialView("Evil", model))}); 
    } 
    return View(model); 
} 
+6

omg 렌더링을 문자열로 변환하십시오! 나는 그것에 대해 결코 알지 못했다. O.O –

+0

만약 ReturnSpecialJsonIfInvalid를 호출하는 ajax 호출이라면, 데이터가 리턴 된 것으로 예상됩니다. jquery가 json과 뷰를 구분하는 방법은 무엇입니까? – mko

+2

RenderViewToString() 메서드의 정의는 어디에 있습니까? –

28

대신 RenderViewToString의 내가

return Json(new { Url = Url.Action("Evil", model) }); 

같은 접근 방식을 선호 : 위의 스레드에서 코드를 사용

, 당신이 사용할 수있을 것 같은 것을하십시오

success: function(data) { 
    $.post(data.Url, function(partial) { 
     $('#IdOfDivToUpdate').html(partial); 
    }); 
} 
+1

좋은 접근 방법. 클리너가 뷰를 문자열로 렌더링합니다. –

+27

그러나 더 많은 http 요청이 필요합니다. – Rookian

+3

그러나 이것은 json 응답의 'error'필드를 생략합니다. –

관련 문제