基本上我的问题是类似的,甚至是复制这个,除了我使用MVC Razor。我敢肯定,那里的答案是过时的,因为目前使用的客户端库是jQuery/不显眼的ajax。
所以总结一下这个问题,我试图访问在所提供的AjaxOptions
的OnSuccess
属性中指定的处理程序中触发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);"})