2012-09-24 3 views
10

MVC에는 간단한 ajax 양식이 있습니다. AjaxOptions에는 OnComplete가 한 가지 일을하는 간단한 javascript 함수로 설정되어 있습니다. false를 반환합니다.OnComplete가있는 Ajax.BeginForm은 항상 페이지를 업데이트합니다.

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { UpdateTargetId = "DivFormId", HttpMethod = "Post", OnComplete = "preventUpdate" })) 

function preventUpdate(xhr) { 
    return false;  
} 

문제는 해당 페이지가 이미 업데이트 된 것입니다. 예 : 한 경우 컨트롤러는 포스트 백 이후에 부분 뷰를 반환하고, 다른 경우에는 일부 Json 객체를 반환합니다. 부분 뷰가 반환 될 때 페이지를 업데이트하고 json이 반환 될 때 대화 상자 창을 표시하려고합니다. 안타깝게도 json이 반환되면 OnComplete 함수가 false를 반환하는 경우에도 MSDN에서 설명한대로 페이지를 지우고 (json으로 업데이트) 페이지 업데이트를 취소하려면 JavaScript 함수에서 false를 반환합니다.

수신 된 응답에 따라 페이지 업데이트를 방지하는 방법은 무엇입니까?

감사합니다.

----- 업데이트 -------

지금까지 해결책을 찾았습니다. UpdateTargetId를 지정하지 않으면 원하는 응답으로 수동으로 수행 할 수 있습니다. 그러나 여전히 false를 반환하면 문서화 된 동작이 아닙니다.

+0

는 아마도이 도움이됩니다, 또한 (이 경우가 처음 코멘트 http://stackoverflow.com/a/1357151/985284 –

+1

보고 그러나 확실히, 나는이 두 가지 방법을 시도했다.) 이것은 OnBegin, OnComplete와 같은 이벤트로 Ajax.BeginForm을 처리하는 MS 처리입니다. MSDN 문서에 따라 OnComplete는 false를 반환하여 중지 할 수 있어야합니다. –

답변

22

OnSuccess을 사용하고 UpdateTargetId을 제거하십시오.

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "Post", OnSuccess = "foo" })) 
{ 
    ... 
} 

다음 :이처럼

function foo(result) { 
    if (result.SomePropertyThatExistsInYourJsonObject) { 
     // the server returned a JSON object => show the dialog window here 
    } else { 
     // the server returned a partial view => update the DOM: 
     $('#DivFormId').html(result); 
    } 
} 
+0

'$ ('# DivFormId') .html (result.responseText);'나를 위해 일했습니다. – Filip

+0

Ajax.BeginForm을 사용하려면 다음 javascript 파일이 필요합니다 (MVC 5 템플릿에는 표준으로 제공되지 않습니다) : jquery. unobtrusive-ajax.js https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/3.2.3 – Baxter