1

クリックしたものを関数Ajax.ActionLink内から参照するにはどうすればよいですか?OnBegin

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', '');
}
4

2 に答える 2

2

すぐに使用できるヘルパーでは要素をコールバックAjax.*に渡さないため、これを実現することはできません。onBeforeSendMicrosoftがそれを実装した方法では、クリックされたxhrオブジェクトではなく、オブジェクトを渡します。elementしたがって、1つの可能性は、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);

コールバック内に要素とxhrオブジェクトの両方を含める必要がある場合OnBegin

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', '');
}

もう1つの可能性は、Ajax.ActionLinkを標準のHtml.ActionLinkに置き換えてから、対応するjQueryコードを記述して.clickイベントをサブスクライブし、AJAXリクエストをトリガーすることです。個人的にはおそらくそれが私がすることです。

于 2012-06-28T18:02:03.383 に答える
1

これは、ASP.NET MVC 5.1 で修正されました。別のスタックオーバーフローの質問からのアプローチを使用しています: How to use $(this) inside MVC3 Ajax.ActionLink OnBegin,OnComplete Events

于 2014-01-21T13:50:49.760 に答える