この MVC フォームには 2 つのドロップダウン リストがあり、最初のドロップダウンを選択すると、AJAX 呼び出しを介して 2 番目のドロップダウンが更新されます。
フォームは次のようになります。
<%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 呼び出し (フォームの onsubmit コードが原因) が発生し、2 番目にページが完全に更新されるようです。
明らかに私が欲しいものではありません。
onsubmit JavaScript コードをデバッグすると、フォームのデフォルトの投稿動作をキャンセルする必要がある 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 呼び出しを起動し、新しいドロップダウン リスト クライアント側または別のフォームに非表示のボタンを追加して、最初の変更イベントでクリック イベントを呼び出す別のソリューションを考え出しました。ドロップダウンですが、最初のもの(最もクリーンなimo)を使用したいです。
何かアドバイス?
S.