2012-06-28 21 views
1

如何從OnBegin函數中引用點擊的Ajax.ActionLink函數?如何從其OnBegin函數中引用單擊的ActionLink`a`元素?

CSHTML

@Ajax.ActionLink(
    typeName, 
    "OrderQueueRows", 
    new 
    { 
     typeNames = Model.Name, 
     includeDerivedTypes = ViewBag.IncludeDerivedTypes, 
     excludeCompletedOrders = ViewBag.ExcludeCompletedOrders 
    }, 
    new AjaxOptions { 
     LoadingElementId="ajax-loading", 
     OnBegin = "highlightFilter", 
     UpdateTargetId = "order-queue-body" 
    }, 
    new { @class = "show-exclusively" }) 

的JavaScript

function highlightFilter() { 
    $link = $(this); 
    $link.css('color', 'red'); 
    $link.siblings().not($link).css('color', ''); 
} 

回答

2

你不能與出的現成Ajax.*助手實現這一目標,因爲他們沒有元素傳遞給onBeforeSend回調。微軟實施它的方式是通過xhr對象而不是被點擊的element。所以有一種可能性是修改jquery.unobtrusive-ajax.js腳本,以便將此信息傳遞給回調。上線85,你會看到beforeSend回調中執行以下操作:

result = getFunction(element.getAttribute("data-ajax-begin"), ["xhr"]).apply(this, arguments); 

所有你需要做的是改變這樣的:

result = getFunction(element.getAttribute("data-ajax-begin"), ["xhr"]).apply(element, arguments); 

,如果你需要有兩個元素和您OnBegin回調裏面XHR對象:

result = getFunction(element.getAttribute("data-ajax-begin"), ["xhr"]).apply({ xhr: this, element: element }, arguments); 

現在,你的代碼是去工作和this將代表元素:

function highlightFilter() { 
    $link = $(this); 
    $link.css('color', 'red'); 
    $link.siblings().not($link).css('color', ''); 
} 

另一種可能性是簡單地用標準Html.ActionLink更換Ajax.ActionLink然後寫入對應jQuery代碼訂閱。點擊事件和觸發AJAX請求。就個人而言,這可能是我會做的。

+0

真棒!謝謝Darin。 – Benjamin

相關問題