2012-09-24 29 views
10

Tôi có dạng ajax đơn giản trong MVC. Trong AjaxOptions có OnComplete được đặt thành hàm javascript đơn giản, có một thứ - trả về false.Ajax.BeginForm với OnComplete luôn cập nhật trang

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

function preventUpdate(xhr) { 
    return false;  
} 

Vấn đề là, trang đó đã được cập nhật. Ví dụ. trong một trường hợp điều khiển trả về một phần xem sau khi postback, trong trường hợp khác nó trả về một số đối tượng Json. Tôi muốn nó cập nhật trang khi xem một phần được trả về, và để hiển thị cửa sổ hộp thoại khi json được trả về. Thật không may khi json được trả về, nó xóa trang (cập nhật nó với json) ngay cả khi chức năng OnComplete trả về false như MSDN nói: Để hủy bỏ việc cập nhật trang, trả về false từ hàm JavaScript.

Làm cách nào để ngăn cập nhật trang tùy thuộc vào phản hồi nhận được?

Cảm ơn bạn!

----- UPDATE -------

Cho đến nay tôi tìm thấy giải pháp sau. Khi tôi không chỉ định UpdateTargetId, tôi có thể làm theo cách thủ công với phản hồi những gì tôi muốn. Nhưng nó vẫn không được ghi lại hành vi với trả về false.

+0

lẽ điều này sẽ giúp đỡ, cũng nhìn vào những nhận xét đầu tiên http://stackoverflow.com/a/1357151/985284 –

+1

Đây không phải là trường hợp (nhưng để chắc chắn, tôi cũng đã thử hai phương pháp này). Đây là xử lý MS cho Ajax.BeginForm với các sự kiện như OnBegin, OnComplete, ... Và OnComplete theo tài liệu MSDN nên có thể dừng lại bằng cách trả về false. –

Trả lời

22

Sử dụng OnSuccess và loại bỏ UpdateTargetId. Như thế này:

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

và sau đó:

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);' làm việc cho tôi – Filip

+0

Để sử dụng Ajax.BeginForm bạn cần tệp javascript sau (không có tiêu chuẩn trong mẫu MVC 5): jquery. unobtrusive-ajax.js https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/3.2.3 – Baxter

Các vấn đề liên quan