У меня есть эта форма MVC с 2 раскрывающимися списками, где выбор в первом раскрывающемся списке должен обновлять второй с помощью вызова AJAX.
Форма выглядит следующим образом:
<%using (Ajax.BeginForm("GetChildren", "Home", null, new AjaxOptions { UpdateTargetId = "result" }, new Dictionary<string, object> { { "id", "someForm" } }))
{ %>
<%= Html.DropDownList("masterSelection", new SelectList((IList<Master>)ViewData["Master"], "MasterName", "MasterName"))%>
<span id="result">
<%Html.RenderPartial("ChildSelection");%>
</span>
<% } %>
Со следующим скриптом JQuery:
$(function () {
$("#masterSelection").change(function () {
$("#someForm").submit();
});
});
Это переводит на следующий клиентский HTML-код
<form action="/Home/GetChildren" id="someForm" method="post" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'result' });">
Если я правильно понял, onsubmit должен позаботиться о вызове AJAX, а также предотвратить нормальное поведение формы (полное обновление).
Теперь все работает нормально в Firefox, но в IE кажется, что поведение по умолчанию не отменено, что приводит к вызову AJAX (вызванному кодом отправки формы) и второму полному обновлению страницы.
Очевидно, не то, что я хочу.
Когда я отлаживаю javascript-код onsubmit, он сводится к методу в файле MicrosoftAjax.js, который должен отменить поведение моей формы по умолчанию после публикации.
function Sys$UI$DomEvent$preventDefault() {
/// <summary locid="M:J#Sys.UI.DomEvent.preventDefault" />
if (arguments.length !== 0) throw Error.parameterCount();
if (this.rawEvent.preventDefault) {
this.rawEvent.preventDefault();
}
else if (window.event) {
this.rawEvent.returnValue = false;
}
}
При отладке с помощью IE я получаю строку this.rawEvent.returnValue = false; что должно быть правильным для отмены события в IE, но, очевидно, это не работает для меня.
Я уже разработал альтернативные решения, в которых я использую jQuery для запуска AJAX-вызова и создания нового выпадающего списка на стороне клиента или другого, где я добавляю невидимую кнопку в форму для вызова ее события click в событии change первого выпадающего списка, но я все еще хочу использовать первый (самый чистый imo).
Любой совет?
S.