2011-10-14 30 views
7

Tôi đã có một Ajax.ActionLink như vậy:Làm thế nào để vượt qua một cuộc tranh cãi với chức năng thành công của một Ajax.ActionLink

@Ajax.ActionLink("Load Related Titles", 
"AjaxLoadRelated", 
"Shared", 
new { RelatedComics = c.RelatedComic.RelatedTitles }, 
new AjaxOptions() { HttpMethod = "Get", UpdateTargetId = "divRelatedTitles", LoadingElementId = "divLoading", OnBegin = "ajaxLoadMoreBegin", OnFailure = "ajaxLoadMoreFailed", OnSuccess = "ajaxLoadMoreSuccess" }) 

Hiện nay chức năng onSuccess của tôi trông giống như vậy:

function ajaxLoadMoreSuccess() { 
    ... 
} 

tôi muốn vượt qua một cuộc tranh cãi với nó:

function ajaxLoadMoreSuccess(myArg) { 
    ... 
} 

đây có phải là có thể?

Cảm ơn trước

Trả lời

8

Có thể thực hiện. Kịch bản lệnh mvc ajax không phô trương tạo ra một hàm ẩn danh với ba tham số (tương ứng với các tham số cho phương thức hoàn thành jquery ajax) dữ liệu, trạng thái, xhr và gọi phương thức đó với các đối số cho phương thức hoàn thành jquery ajax. Vì vậy, ví dụ:

...OnSuccess = "ajaxLoadMoreSuccess1('hello world')"

Hoặc

...OnSuccess = "ajaxLoadMoreSuccess2(calc(), data, status, xhr)"

<script type="text/javascript"> 
    function ajaxLoadMoreSuccess1(message) { 
     alert(message); 
    } 

    function ajaxLoadMoreSuccess2(x, data, status, xhr) { 
     $('#somespan').text('calc was ' + x + ' and data is ' + data); 
    } 

    function calc() { 
     return 1 + 2; 
    } 
</script> 
+0

Không thể tin rằng tôi đã không hiểu rằng con số cho bản thân mình! Cảm ơn! – Sniffer

+0

Không hiệu quả với tôi. Tôi đang cố gắng để vượt qua 'điều này' (bản thân bản thân được tạo ra). – Shimmy

+0

Đó là vì con trỏ 'this' này không bị ràng buộc với phần tử dom cho hàm nặc danh hoặc cho hàm' ajaxLoadMoreSuccess'. Vì vậy, 'ajaxLoadMoreSuccess (this) ', ở đây' this' là giống 'this' như cho cuộc gọi thành công ajax (xem [' context' option] (http://api.jquery.com/jQuery.ajax/)). Và bên trong hàm 'ajaxLoadMoreSuccess'' this' bị ràng buộc với đối tượng chung ('window'). Bạn có thể tinh chỉnh kịch bản lệnh jquery.unobtrusive-ajax.js để nó liên kết 'this' với phần tử dom. Nhưng dễ dàng hơn, đặt id trên thẻ 'a' và sử dụng jquery để lấy phần tử. Như thế này, 'ajaxLoadMoreSuccess ($ (' # my-a-id ')) '. – Sperling

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