2011-10-14 4 views
2

에 의해 JSON()를 사용하여 반환 문자열로 뷰 결과를 반환하는 함수가 내가 JSON 응답 내에서 객체로 반환 할 수 있습니다

protected string RenderViewResultToString(ViewResultBase viewResult) { 
    using (var sw = new StringWriter()) { 
    if (string.IsNullOrEmpty(viewResult.ViewName)) 
     viewResult.ViewName = ControllerContext.RouteData.GetRequiredString("action"); 
    ViewEngineResult result = null; 
    if (viewResult.View == null) { 
     result = viewResult.ViewEngineCollection.FindPartialView(ControllerContext, viewResult.ViewName); 
     if (result.View == null) 
     throw new InvalidOperationException("Unable to find view. Searched in: " + string.Join(",", result.SearchedLocations)); 
     viewResult.View = result.View; 
    } 
    var view = viewResult.View; 
    var viewContext = new ViewContext(ControllerContext, view, viewResult.ViewData, viewResult.TempData, sw); 
    view.Render(viewContext, sw); 
    if (result != null) 
     result.ViewEngine.ReleaseView(ControllerContext, view); 
    return sw.ToString(); 
    } 
} 

그래서, 내 컨트롤러에서 나는이 :

[HttpPost, ValidateInput(false)] 
    public JsonResult Edit(/* stuff */) { 
     bool success = true; 
     try { 
      /* stuff */   
     } catch { 
      /* stuff */ 
      success = false; 
     } 
     return Json(new { success, result = RenderViewResultToString(/* stuff - call to something that gives a ViewResult */) }); 
    } 

채널에서 "문서로 해석되었지만 MIME 유형 application/json으로 전송 된 리소스." JSON을 브라우저에서 텍스트로 렌더링합니다. Firefox/IE에서 파일을 다운로드하라는 메시지가 나타납니다.

무엇을 제공합니까?

답변

2

양식 제출이 표시되지 않습니다. 사용자가받는 메시지는 JSON을 반환하는 페이지로 실제 양식을 제출 한 것입니다. 브라우저 주소 표시 줄을 확인하면 URL이 다르다는 것을 알 수 있습니다.

콘솔에서 $("#@containerId form")을 실행하면 결과가 나타나지 않습니다. "@"는 선택자에서 유효하지 않은 문자이므로 이스케이프해야합니다. $("#\\@containerId form")이 작동해야합니다.

+0

예 주소가 변경됩니다. @는 면도기 문법이므로 유효한 ID를 출력하므로 문제는되지 않습니다. – enashnash

+0

'event.preventDefault();'가 양식 제출을 억제한다고 생각 했습니까? – enashnash

+0

제출 방법이 좋다고 확신합니까? 처음에 경고를 추가해보십시오. 그렇지 않은 경우 콘솔에서 열어 실제 선택기가 결과를 반환하는지 확인하십시오. 그렇다면,'event.preventDefault(); 대신'return false;'를 사용해보십시오. submit 함수는 실제로 오래된 것이고, 이것이 작동해야합니다. –

관련 문제