4

セットアップ:

アプリを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は間違っています...

質問:

問題は、何が問題なのかということです。

4

1 に答える 1

12

OK、私はこれを解決しました。

MVC 3アプリでは、web.configで次のようにコメントアウトしました。

<appSettings>
    <add key="webpages:Version" value="1.0" />
    <!--<add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />-->
  </appSettings>

これは、asp.netmvc3がhtml5をレンダリングしなかった理由を説明しています。

新しいMVC4アプリでは、デフォルト設定には次のようにClientValidationEnbled=trueとがあります。UnobstrusiveJavaScriptEnabled=true

<appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    ...
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

そのため、私のアプリには次のJavaScriptファイルを含める必要がありました。

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

そして、それはマイクロソフト* .jsファイルを捨てる必要がありました、すなわち:

@*<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>*@

次の質問に対する@DarinDimitrovの回答を読んだ後、私はこれを理解しました。

MicrosoftAjax.js、MicrosoftMvcAjax.js、およびMicrosoftMvcValidation.jsは、ASP.NET MVC 3で廃止されていますか?

ダリンに感謝します。私が無効にした2つのappSettingsの意味について自分自身を啓蒙するために、答えは読む価値があります。

于 2012-09-20T13:15:51.647 に答える