2011-04-07 5 views
0

나는 standardSubmit : false로 ExtJs formpanel을 가지고 있습니다. 제출시 컨트롤러는 서버에서 일부 유효성 검사가 수행되므로 formdata의 유효성을 검사합니다 (예 : 이름이 고유한지 확인). 제공된 엔티티가 유효하지 않은 경우 사용자에게 유효하지 않은 필드를 알리기 위해 JsonResult가 클라이언트에 전송됩니다. 그건 완벽하게 작동합니다. 엔터티가 유효하면 데이터베이스에 저장되고 컨트롤러는 사용자를 특정보기로 리디렉션해야합니다.컨트롤러는 JsonResult를 제공하거나보기로 리디렉션해야합니다.

결과는 뷰에서 제공 한 HTML이 JSON 응답이 필요한 클라이언트로 전송된다는 것입니다. 분명히, 이것은 작동하지 않습니다.

public override ActionResult Create(FormCollection formCollection) 
    { 
     Models.Relatie relatie = Repository.CreateNew(); 
     SetFormValues(relatie, formCollection); 

     if (ModelState.IsValid) 
     { 
      _relatieService.CreateRelation(relatie); 
      ViewResult view = View("Index"); 
      return view; //pumps html while client expects JSON 
     } 
     else 
     { 
      JsonResult json = Json(new { success = false, errors = ModelState.ToDictionary() }); 
      return json; 
     } 
    } 

저는 8 시간 넘게 해결책을 찾고 있습니다. 아무도 도와 주실 수 없습니까?

답변

0

success 속성이 true로 설정된 JSON 객체를 되돌려 보내십시오. 성공 처리기에서 AJAX 호출을 확인하고 javascript (window.location = indexLink)를 사용하여 리디렉션하십시오.

당신은 당신이 웹 형태의 엔진을 볼 사용하고있는 링크 서버 측을 생성하려면이 페이지에서 스크립트 변수를 포함하는 것처럼 당신이 뭔가를 할 필요가 있다고 지적 가치

:

<%= "<script language=\"javascript\"> var indexLink = \"" + Url.Action("Index") + "\";</script>" %> 

다음은 귀하의 페이지에서 indexLink을 사용할 수 있습니다.

+0

감사합니다. 실제로 JsonResponse 객체에 리디렉션 링크를 제공하여 서버에서 확인할 수 있도록했습니다. MVC 패러다임의 아주 작은 위반,하지만이 받아 들일 수 있습니다. 그것은 여전히 ​​매우 깨끗해 보입니다. – Paul77

+0

약간이지만 IMO AJAX가 MVC 애플리케이션의 애플리케이션 흐름을 제어하는 ​​데 정말로 사용되어서는 안됩니다. 마찬가지로 Create 뷰는 HTML을 리턴하지 않고 실제로 Index로 리디렉션되어야한다. –

+0

자바 스크립트 리디렉션이 모든 브라우저에서 작동하려면 'href' 속성을 사용해야합니다. 예 : 'window.location.href = indexLink' – Eric

관련 문제