2012-11-29 50 views
8

Có thể có Ajax.ActionLink (..., ...) để làm mới toàn bộ trang thay vì UpdatetargetID không?Cập nhật toàn bộ trang bằng Ajax.ActionLink

Tôi thích sử dụng Ajax.ActionLink hơn vì Html.ActionLink cổ điển không phải là phương thức POST.

tôi cố gắng:

@Ajax.ActionLink("Click me", "MyAction", "MyController", new { value = '1234' }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure ?" }, null) 

Nhưng trang đó không được làm mới, tôi phải nhấn F5.

Cảm ơn.

+0

chỉ tò mò, có gì sai với phương thức GET? – Dmitry

+2

Đây không phải là ý tưởng hay khi sử dụng phương thức GET để thực hiện các tác vụ như thay đổi trạng thái của mọi thứ trong một ứng dụng (xóa bản ghi, thay đổi satus, ...). Ở đây tôi cần một actionLink để thay đổi trạng thái đó là lý do tại sao tôi không muốn sử dụng html.actionlink cổ điển, người thực hiện GET. – Bronzato

Trả lời

14

Bạn thực sự có thể kết hợp hai phương thức được gardarvalur đề xuất để nhận mã giống MVC không yêu cầu gói toàn bộ trang trong div. Di chuyển window.location.reload() gọi đến tài sản onSuccess của AjaxOptions phản đối như thế này:

@Ajax.ActionLink("Click me", "MyAction", "MyController", new { value = '1234' }, new AjaxOptions { HttpMethod = "POST", OnSuccess="window.location.reload()" }) 

Không jQuery tham gia, chỉ cần một số javascript cũ đồng bằng trong một MVC Ajax ActionLink.

+0

Đã để sử dụng window.location.href = window.location.href; để tránh cảnh báo repost – stuartd

2

Còn cuộc gọi doin ajax trong Jquery thì sao? Một cái gì đó như thế này.

<button onclick="SomeFunction()" type="button" >Click me</button> 

Và sau đó trong Jquery một cái gì đó như thế này:

function SomeFunction() 
{ 
    var url = '/MyController/MyAction/'; 

    $.ajax({ 
     type: "POST", 
     url: url, 
     data: { value: '1234' }, //if there are any parameters 
     dataType: "html", //or some other type 
     success: function (data) { 
      window.location.reload(true); 
      // or something in that area, maybe with the 'data' 
     }, 
     error: function() { 
     //some derp 
     } 
    }); 

Tôi hy vọng Tôi đang không hiểu lầm câu hỏi của bạn (và tôi nhận ra điều này không được chính xác sử dụng Ajax.ActionLink). ;) Trân trọng!

########## EDITED #########

Hoặc có thể là một ý tưởng xa vời, nói với các liên kết đến updatetargetid rằng kết thúc tốt đẹp toàn bộ trang của bạn trong. Một cái gì đó như thế này:

@Ajax.ActionLink("Click me", "MyAction", "MyController", new { value = '1234' }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure ?", UpdateTargetId = "TheDivToUpdate" }, null) 

Và sau đó quấn nội dung của trang của bạn với thẻ này div:

<div id="TheDivToUpdate"> 
    //The content of your page 
</div> 

tôi biết, không phải là giải pháp đẹp nhất nhưng có lẽ nó hoạt động cho bạn?

+0

Cảm ơn bạn đã đề xuất nhưng tôi không muốn sử dụng jQuery lần này. Tôi thích một giải pháp như 'MVC' hơn. – Bronzato

+0

aaa ok, tôi đã chỉnh sửa câu trả lời của mình, chỉ trong trường hợp nếu điều đó có tác dụng thay thế :) – gardarvalur

+0

Sử dụng tải lại, tôi nhận được hộp msg sau đây "để hiển thị lại trang web, trình duyệt web cần gửi lại thông tin bạn đã" – usefulBee

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