セットアップ:
アプリをASP.NETMVC3からASP.NETMVC4に更新しました。
アプリはMVC3で正常に機能しました。MVC4で機能しないのはAjax.Beginフォームだけです。フォームはデフォルトで非同期AJAXリクエストではなくフルページリクエストになります。
基本的に、それは私が書いたウィザードですが、それは無関係です。Model.Step.ActionNameは文字列を正しく返します(以下のコードを参照)。
コード:
ビューのコードは次のとおりです。
@{
using (Ajax.BeginForm(Model.Step.ActionName, null, new AjaxOptions { UpdateTargetId = "wizardStep", OnBegin="isValid", LoadingElementId="PleaseWait", OnSuccess="SetFocusOnForm" },
new {@name="wizardForm", @id="wizardForm" } ))
{
//form contents
}
}
レンダリング:
MVC4のAjax.BeginFormはHTML5を使用していることに注意してください。MVC3とMVC4がフォームをレンダリングする方法の違いを以下に示します。
MVC 3:
<form action="/Solicitors/Company/New/YourDetails" id="wizardForm" method="post" name="wizardForm" 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, loadingElementId: 'PleaseWait', updateTargetId: 'wizardStep', onBegin: Function.createDelegate(this, isValid), onSuccess: Function.createDelegate(this, SetFocusOnForm) });">
// form contents
</form>
MVC 4:
<form action="/Solicitors/Company/New/LoginDetails" data-ajax="true" data-ajax-begin="isValid" data-ajax-loading="#PleaseWait" data-ajax-mode="replace" data-ajax-success="SetFocusOnForm" data-ajax-update="#wizardStep" id="wizardForm" method="post" name="wizardForm" novalidate="novalidate">
// form contents
</form>
これが正しいかどうかはわかりませんが、正しいと思います。
問題:
ただし、問題は、Ajaxが使用されておらず、ページ全体が更新されることです。だからsumatは間違っています...
質問:
問題は、何が問題なのかということです。