0

そのため、この「IE は、Ajax 経由で返された Json データのダウンロード ファイル ダイアログを開きます」( this oneまたはthis oneのように) 全体について多くの質問がありますが、控えめな Ajax を使用する人に対する回答は見つかりませんでした。

次のような単純な Ajax.BeginForm を実行します。

Ajax.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, 
    new AjaxOptions { UpdateTargetId = "ContentContainer", OnSuccess = "JsonCheckRedirect" }, 
    new { id = "form1" }
)

これにより、コンテンツ タイプが「application/x-www-form-urlencoded; charset=UTF-8」のフォームが投稿されます。コントローラーはフォームを処理し、エラーが発生した場合は、コンテンツ タイプが "text/html" の PartialView を返し、その HTML が ContentContainer に入れられます (AjaxOptions の "UpdateTargetId" プロパティのため)。

エラーがなく、ユーザーが正常にログインした場合、リダイレクト先の URL を含む Json が返されます。したがって、コントローラーでは、次のようになります。

return Json(new { Url = returnUrl });

IE8 でダウンロード ダイアログがポップアップする原因になっていることをユーザーから通知してもらったことを除いては。同じ問題に関する他のすべての質問を読んだ後、なぜこれが起こっているのか理解できましたが、これらの状況の修正は、代わりにこの Json リターンを使用することです。

return Json(new { Url = returnUrl }, "text/html");

問題は、このように戻ると、サーバーからの応答が HTML であることが Unobtrusive Ajax によって認識され、UpdateTargetId コンテナー内のコンテンツが置き換えられることです。サーバーが「application/json」で応答する場合、これは行われません。

これを回避する方法はありますか?

(これ以上説明する必要がありますか?)

4

1 に答える 1