persönlich bevorzuge ich mit HTML5 Daten- * Attribute oder darunter die URL als Teil eines DOM Element, das ich unaufdringlich AJAXify.
Die Sache ist, dass Sie nie schreiben $.ajax
Anrufe herumfliegen so. Sie schreiben sie so, dass sie einigen DOM-Ereignissen entsprechen. Wie zum Beispiel das Klicken eines Ankers. In diesem Fall trivial es ist, verwenden Sie nur ein HTML-Helfer diesen Anker zu erzeugen:
@Html.ActionLink("click me", "someAction", "somecontroller", new { id = "123" }, new { @class = "link" })
und dann:
$('.link').click(function() {
$.ajax({
url: this.href,
type: 'GET',
success: function(result) {
...
}
});
return false;
});
oder vielleicht sind AJAXifying Sie ein Formular:
@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
...
}
und dann:
$('#myForm').submit(function() {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function(result) {
...
}
});
return false;
});
An Ein anderes Beispiel wäre die Verwendung von HTML5-Daten * -Attributen, wenn für das entsprechende DOM-Element keine entsprechende URL verfügbar ist. Angenommen, Sie möchten eine Controller-Aktion mit AJAX aufrufen, wenn sich die Auswahl eines Dropdown-Menüs ändert. Denken Sie zum Beispiel an kaskadierende ddls.
Hier ist, wie Sie Ihre Drop-Down aussehen könnte:
@Html.DropDownListFor(x => x.SelectedValue, Model.Values, new { id = "myDdl", data_url = Url.Action("SomeAction") })
und dann:
$('#myDdl').change(function() {
var url = $(this).data('url');
var selectedValue = $(this).val();
$.getJSON(url, { id: selectedValue }, function(result) {
...
});
});
So wie Sie Sie sehen nicht wirklich brauchen diese _getUrl
globale JavaScript-Variable, die Sie erklärt in Ihrem Aussicht.
Ihre Skripte sollten in einer separaten minimierbaren/cachbaren js-Datei vorliegen. – asawyer
Ich mache das gleiche, aber ich bin mir nicht sicher, ob es gut ist. +1 für Frage :) –
@asawyer - nicht sicher, was der Punkt Ihres Kommentars ist ... – cs0815