2010-07-16 2 views
0

ASP.NET MVC 사이트의 두 페이지 이상에서 이상한 문제가 발생합니다. POST를 수행 할 때 모델이 유효하지 않은 경우 오류가 표시 될 수 있도록 동일한 뷰를 반환하려고합니다. 그러나 페이지가 다시로드되는 대신 파일이 다운로드됨을 알리는 팝업 다운로드 상자가 나타납니다. "application/json"형식으로. 아래의 코드에서 볼 수 있듯이, 컨트롤러 방법은 ActionResult 아닌 JsonResult 반환 : 나는 그것을 작성하지 않고 내 양식을 제출하면HttpPost에서 Model이 유효하지 않을 때 View (ActionResult)를 반환하면 응답의 콘텐츠 유형이 application/json

[HttpPost] 
    public ActionResult LogOn(LogOnModel model, string returnUrl) 
    { 
     var isValid = IsUserAuthenticated(model); 
     if (isValid) 
     { 
      if (!String.IsNullOrEmpty(returnUrl)) 
      { 
       return Redirect(returnUrl); 
      } 
      else 
      { 
       return User.IsInRole("Administrator") 
          ? RedirectToAction("Index", "Admin") 
          : RedirectToAction("Index", "Home"); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

, 나는 모델이 유효성 검사를 (제대로) 실패하는 것을 볼 수 있지만, 마지막 줄에 도달하면 "return View (model);" - 내가 기대하는 모든 HTML을 반환하지만 콘텐츠 유형은 "application/json"으로 설정됩니다. 내 코드에서 콘텐츠 유형을 설정하지 않기 때문에 이러한 상황이 발생하는 이유를 알 수 없습니다. 다른 페이지에서도 똑같은 일이 일어나고 있습니다. 그래서 제가 잘못하고있는 근본적인 것이 있다고 생각합니다. 그러나 나는 그것을 알아낼 수 없습니다.

의견이 있으십니까?

+0

이것이 도움이되는지 아닌지는 잘 모르겠지만, 내 프로젝트에서 공통적 인 것처럼 보입니다. 다른 컨트롤러 메서드 (또한 HttpPost 만 수락 함)와 동일한 문제가 있지만 ... "ModelState.IsValid"가 false 인 경우에만 발생합니다. return 문에 실제 뷰 이름을 포함시켜 보았습니다. return View ("LogOn", model); 하지만 아무것도 변경되지 않습니다. 또한 JSON을 처리하지 않기 때문에 브라우저에서 응답을 다운로드할지 묻는 팝업 상자가 나타납니다. 그렇게하면 내 페이지의 HTML과 내가보기를 원하는 오류 메시지가 표시됩니다. – leftend

답변

0

나는 마침내 문제를 알아 냈습니다 ... 그것은 나에게 도입 된 오류였습니다. 나는 당황 스럽습니다. 그러나 실수를 저지르는 것은 정말 쉬운 일이므로 누군가 다른 문제가 발생할 경우를 대비하여 여기에 문서화하고 싶습니다. 그것은 모두 "Site.Master"페이지에서 사용하고 있던 "Html.RenderAction (..)"호출 때문에 발생했습니다. 그 작업은 JsonResult를 반환하고, 원래의 게시물에서 오류가 발생하려고하면 JsonResult를 반환하는 작업은 마스터 페이지가로드되는 즉시 실행되므로이 ​​문제가 발생합니다.

나는 "Html.RenderAction (...)"호출을 제거하고 거기에 필요한 HTML 코드를 하드 코딩했습니다.

도움이 되길 바랍니다.

관련 문제