Die Seite wird gerendert. UI.DomEvent (Ereignis), {Einfügemodus: Sys.Mvc.InsertionMode.replace, onSuccess: Function.createDelegate (this, Funktion (Kontext) {alert ('get triggerElement Referenz hier?');})}); " > x </a >
Also lassen Sie sich bei Sys.Mvc.AsyncHyperlink.handleClick
innen Scripts\MicrosoftMvcAjax.debug.js
einen Blick:
Sys.Mvc.AsyncHyperlink.handleClick = function Sys_Mvc_AsyncHyperlink$handleClick(anchor, evt, ajaxOptions) {
/// omitted doc comments
evt.preventDefault();
Sys.Mvc.MvcHelpers._asyncRequest(anchor.href, 'post', '', anchor, ajaxOptions);
}
So ist die Action zu einem Anker gemacht wird ("a") Tag, mit einer "Onclick" Veranstaltung, die Verwendet Sys.Mvc.AsyncHyperlink.handleClick
mit dieser als einer der Parameter, zugeordnet Anker.
Dann gibt es diese Anruf mit Anker als vierten Parameter. Werfen wir einen Blick in Sys.Mvc.MvcHelpers._asyncRequest
haben:
Sys.Mvc.MvcHelpers._asyncRequest = function Sys_Mvc_MvcHelpers$_asyncRequest(url, verb, body, triggerElement, ajaxOptions) {
/// omitted documentation
if (ajaxOptions.confirm) {
if (!confirm(ajaxOptions.confirm)) {
return;
}
}
if (ajaxOptions.url) {
url = ajaxOptions.url;
}
if (ajaxOptions.httpMethod) {
verb = ajaxOptions.httpMethod;
}
if (body.length > 0 && !body.endsWith('&')) {
body += '&';
}
body += 'X-Requested-With=XMLHttpRequest';
var requestBody = '';
if (verb.toUpperCase() === 'GET' || verb.toUpperCase() === 'DELETE') {
if (url.indexOf('?') > -1) {
if (!url.endsWith('&')) {
url += '&';
}
url += body;
}
else {
url += '?';
url += body;
}
}
else {
requestBody = body;
}
var request = new Sys.Net.WebRequest();
request.set_url(url);
request.set_httpVerb(verb);
request.set_body(requestBody);
if (verb.toUpperCase() === 'PUT') {
request.get_headers()['Content-Type'] = 'application/x-www-form-urlencoded;';
}
request.get_headers()['X-Requested-With'] = 'XMLHttpRequest';
var updateElement = null;
if (ajaxOptions.updateTargetId) {
updateElement = $get(ajaxOptions.updateTargetId);
}
var loadingElement = null;
if (ajaxOptions.loadingElementId) {
loadingElement = $get(ajaxOptions.loadingElementId);
}
var ajaxContext = new Sys.Mvc.AjaxContext(request, updateElement, loadingElement, ajaxOptions.insertionMode);
var continueRequest = true;
if (ajaxOptions.onBegin) {
continueRequest = ajaxOptions.onBegin(ajaxContext) !== false;
}
if (loadingElement) {
Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), true);
}
if (continueRequest) {
request.add_completed(Function.createDelegate(null, function(executor) {
Sys.Mvc.MvcHelpers._onComplete(request, ajaxOptions, ajaxContext);
}));
request.invoke();
}
}
So der ursprüngliche Anker jetzt triggerElement ist, aber wie Sie sehen können, ist dieser Parameter nie benutzt in die körpereigene Funktion.
Also, wenn Sie eine Art von "formellen" (oder dokumentierten) Verweis auf triggerElement haben wollen - keine solche Sache.
Aber hey, es ist JavaScript, so dass Sie fast alles zugreifen können, solange der Browser nicht auf eine andere Seite verschoben wurde, einschließlich der Anrufliste. Zum Beispiel:
<script type="text/javascript">
function a(p, q)
{
b();
}
function b() {
var x = arguments.caller[1];
alert(x); // boo!
}
a(789, "boo!");
</script>
So können Sie es schließlich hacken und den ursprünglichen Anker zugreifen. Ich schlage vor, Sie wie folgt vor:
- eine Funktion schreiben im
OnBegin
aufgerufen werden.
- Innerhalb dieser Funktion Zugang die ursprüngliche
triggerElement
und fügen Sie es als eine Eigenschaft auf den ursprünglichen ajaxOptions
(die auch zugegriffen werden kann)
- Dann wird in der
OnSuccess
Funktion, Zugriff auf Ihre gehackt Eigentum ajaxOptions
.
Was ist im Kontext? –
(Nummer) $ 0 und (Objekt) $ 1, $ 2, $ 3 und $ 4. Auch die folgenden Funktionen: get_data, get_insertionMode, get_loadingElement, get_response, set_response, get_request, get_updateTarget, Konstruktor. Ich kann das triggerElement nirgendwo finden ..... – Ropstah