そのため、この「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」で応答する場合、これは行われません。
これを回避する方法はありますか?
(これ以上説明する必要がありますか?)