0

OnSuccessのコールバックを使用したajax.beginformの非常に標準的なレイアウトがあります。ただし、IE8では、コールバックは呼び出されませんが、Chromeでは正常に機能します。

ビューにjquery.validate.min.js、jquery.validate.unobstusive.min.js、およびjquery.unobstrusive-ajax.min.jsを含めています。

ビューは部分ビューとして使用され、必要なすべてのスクリプトと、コールバックが呼び出すjavascript関数が含まれています。

また、MVC3プロジェクトの最初の作成に付属していたjquery.validate.min.jsを、IE8で既に正しく機能するものにアップグレードする必要があったことにも注意してください。

これが機能しない理由に関する既知の問題はありますか?それとも私は何かが足りないのですか?

[cshtml]

<script type="text/javascript">
    function FormSuccess(context) {
        alert("FormSuccess()");
    };
</script>

@using (Ajax.BeginForm("GetMessage", "Form", new AjaxOptions { OnSuccess = "FormSuccess" }))
{

[コントローラ]

[HttpPost]
public JsonResult GetMessage(MessageModel model)
{
    return Json( success = true, message = "success" );
}

Chromeではコールバックがヒットしますが、IE8ではファイルのダウンロードダイアログが表示されます。ファイルをダウンロードすると、次のファイルが含まれています。

{"success":false,"messages":"success"}

ご覧のとおり、これは私がここで行っている非常に単純なことですが、IE8では機能したくないようです。

何か案は?

アップデート

かみそりのcshtmlファイルをascxページからレンダリングしているため、AjaxOptionsコールバックが呼び出されていないことがわかりました。同じことを行うサンドボックスアプリを作成しました。cshtmlで部分的なcshtmlをレンダリングすると、すべて正常に機能しますが、aspxで部分的なcshtmlをレンダリングすると、コールバックが呼び出されません。

4

1 に答える 1

2

以下は正しくありません

[HttpPost]
public JsonResult GetMessage(MessageModel model)
{
    return Json( success = true, message = "success" );
}

。に変更します:

  [HttpPost]
    public JsonResult GetMessage(MessageModel model)
    {

        return new JsonResult{success = true, message = "success"};
    }

編集:

jsonの結果ではなく、完全なビューを返す必要があります。

ajaxリクエストを送信してJSON結果を取得する場合は、jqueryajax関数を介して送信する必要があります。

于 2012-11-13T19:08:33.697 に答える