2012-03-25 7 views
1

수십 개의 답변을 읽었지만 해결책을 찾지 못했습니다. 면도기에 MVC 3을 사용하고 있습니다. 나는 ajax를 통한 클라이언트 유효성 검증을 가진 간단한 Form을 가지고있다. 이 부분은 잘 작동합니다. 내 문제는 : 업데이트 내 컨트롤러의 작업에서 다른 작업으로 리디렉션하고 싶습니다. 사용자가 Javacript를 비활성화하면 제대로 작동합니다. 하지만 javascript/ajax를 사용하면 리디렉션이 작동하지 않는 것 같습니다. 대신에 어떤 종류의 partialview 나 그와 비슷한 것이 실행되는 것처럼 보입니다.Ajax 리디렉션 제출 MVC 3

내 컨트롤러/액션 코드 :

Function UpdateItem(Item As CItem) As ActionResult 

    ' some validation code, save etc. 

    if everythingok then 
     Return RedirectToAction("Updatesuccess") 
    else 
     Return RedirectToAction("EditItem") 
    endif 

End Function 

내 HTML 페이지 (단축/의사)과 같습니다

양식이 새 HTML 코드가 넘어 추가 아약스를 통해 제출
Logo image 
H1 
some text 

<form>....</form> 

"일부 텍스트"이므로 양식이 대체되지만 대체 된 양식 위에있는 모든 내용은 페이지에 그대로 유지됩니다. 아약스/자바 스크립트가 사용 중지되면 제출 한 후 완전히 새로운 페이지가로드됩니다. http 헤더를 확인한 결과, ajax에는 리다이렉트 (ajax이기 때문에 어떤면에서는 논리적)가 없다는 것을 알 수있었습니다. 어떻게해야합니까? 새 페이지로 리디렉션하고 싶습니다.

ajax-submit을 비활성화하고 "일반"form-submit 만 사용할 수 있습니까? 사용자가 데이터를 입력하는 동안 Ajax를 통한 클라이언트 유효성 검사가 마음에 들지만 사용하려면 "제출"이 "정상적인"제출 인 경우 충분합니다.

누군가가 내가 원하는 것을 이해하고 나를 도울 수 있기를 바랍니다.

감사합니다.

답변

3

나는 귀하의 질문에,하지만 도대체 이해를 100 % 확신은 나를 downvote하지 않을거야 :)

을 문제는, 전송을 통해 작품을 리디렉션되는 헤더에 표시된 리디렉션와 HttpResponse에를 브라우저에서 이해할 수 있습니다. AJAX를 통해 제출하는 경우 요청을 처리하는 브라우저가 아니라 해당 JS 코드입니다.

트릭입니다. 리디렉션을 반환하는 대신 Url을 반환하고 (바람직하게는 json으로) window.location을 사용하여 수동으로 리디렉션하십시오. 나는 여기에 내가 C#에서 그것을 할 거라고 어떻게, VB 유창하지 않다 :

var url = new UrlHelper(this.ControllerContext.RequestContext); 
var link = url.Action("UpdateSuccess"); 
return Json(new {link}); 

다음 jQuery를에 : 당신의 답변

$.ajax({ method: 'POST', 
      url: 'your post url', 
      success: function(result) {window.location = result.link; }, 
      // ... (passing form etc) 
    }); 
+0

감사합니다. 내가 js에서 그렇게 강하지 못하기 때문에, 그것을 움직이기까지 시간이 걸렸지 만 괜찮습니다. –