osobiście wolę HTML5 kabel, lub w tym * atrybutów adres URL jako część DOM element, który dyskretnie AJAXyfikuję.
Chodzi o to, że nigdy nie piszesz takich połączeń w ten sposób. Piszesz je, aby odpowiadały niektórym zdarzeniom z DOM. Jak na przykład kliknięcie kotwicy. W tym przypadku jest to banalne, wystarczy użyć pomocnika HTML do wygenerowania tego kotwicę:
@Html.ActionLink("click me", "someAction", "somecontroller", new { id = "123" }, new { @class = "link" })
a następnie:
$('.link').click(function() {
$.ajax({
url: this.href,
type: 'GET',
success: function(result) {
...
}
});
return false;
});
czy może są AJAXifying formularz:
@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
...
}
i następnie:
$('#myForm').submit(function() {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function(result) {
...
}
});
return false;
});
An innym przykładem byłoby użycie atrybutów danych HTML5 *, gdy odpowiedni URL nie jest dostępny w odpowiednim elemencie DOM. Załóżmy, że chcesz wywołać akcję kontrolera z AJAX, gdy zmieni się wybór rozwijanego menu. Pomyśl na przykład o kaskadowaniu ddls.
Oto w jaki sposób rozwijane może wyglądać tak:
@Html.DropDownListFor(x => x.SelectedValue, Model.Values, new { id = "myDdl", data_url = Url.Action("SomeAction") })
a następnie:
$('#myDdl').change(function() {
var url = $(this).data('url');
var selectedValue = $(this).val();
$.getJSON(url, { id: selectedValue }, function(result) {
...
});
});
tak można zobaczyć naprawdę nie potrzebują tego _getUrl
globalną zmienną JavaScript, który podajesz w widok.
Twoje skrypty powinny znajdować się w osobnym pliku js, który można zminimalizować/zsynchronizować. – asawyer
Robię to samo, ale nie jestem pewien, czy to dobrze. +1 na pytanie :) –
@asawyer - nie jestem pewien, na czym polega Twój komentarz ... – cs0815