获取对Ajax的锚元素的引用.ActionLink在OnSuccess处理程序



基本上我的问题是类似的,甚至是复制这个,除了我使用MVC Razor。我敢肯定,那里的答案是过时的,因为目前使用的客户端库是jQuery/不显眼的ajax。

所以总结一下这个问题,我试图访问在所提供的AjaxOptionsOnSuccess属性中指定的处理程序中触发Ajax请求的锚元素。

ActionLink:

@Ajax.ActionLink("Add opening times entry", "AddOpeningTimes", 
  new { htmlPrefix = Html.HtmlPrefixFor(m => Model.OpeningTimes) },
  new AjaxOptions { UpdateTargetId = "openingTimes",
    InsertionMode =  nsertionMode.InsertAfter,
    OnSuccess = "updateHtmlPrefix" },
  new { title = "Add opening times entry" })

JS:

function updateHtmlPrefix() {
  this.href = this.href.replace(/d(?=]$)/, function (i) { return ++i; });
}

这里有一个答案的链接,其中显示了几个解决方案,并对问题进行了很好的解释。

https://stackoverflow.com/a/1068946/1563373

你可以直接写

 OnBegin="function() { clickedLink = $(this); }" 

然后您可以访问成功处理程序中的clickedLink变量(记住要用页面作用域声明它)。

编辑:

在对调用堆栈进行了一些操作之后,您可以尝试这样做:

<script type="text/javascript">    
    function start(xhr) {        
        var stack = start.caller;
        // walk the stack
        do {
            stack = stack.caller;            
        } while (stack.arguments != undefined && stack.arguments.length > 0 && (stack.arguments[0].tagName == undefined || stack.arguments[0].tagName != "A"))
    //stack now points to the entry point into unobtrusive.ajax
    if (stack.arguments != undefined)
        xhr.originalElement = $(stack.arguments[0]);
    //blech        
}
function UpdateHrefText(result, status, xhr) {
    debugger;
    if(xhr.originalElement != undefined)
        xhr.originalElement.text(result.Message);
}
</script>

@Ajax.ActionLink("Test", "Message", "Home", new AjaxOptions{ OnBegin = "start", OnSuccess = "UpdateHrefText"})

我不确定我是否会在生产中信任它。我会这样写:

<script type="text/javascript">
var theLink;
function start(xhr) {
    xhr.originalElement = theLink;        
}
function UpdateHrefText(result, status, xhr) {
    debugger;
    if(xhr.originalElement != undefined)
        xhr.originalElement.text(result.Message);
}
</script>

@Ajax.ActionLink("Test", "Message", "Home", null, new AjaxOptions{ OnBegin = "start", OnSuccess = "UpdateHrefText"}, new { onclick="theLink = $(this);"})

最新更新