ブートストラップ モーダルで runat="server" タグを使用して ASP.Net Web フォームをレンダリングしています。組み込みのブートストラップ機能を使用して、jQuery ロード関数を使用して get 要求を実行し、応答をブートストラップ モーダル マークアップに挿入します。
asp.net Web フォームは、ポストバック時に 204 の HTTP ステータス コード (コンテンツなし) を返します。これは、フォームを送信でき、ASP.Net サーバー側のクリック イベントが適切に発生し、ブラウザーが応答をレンダリングしようとしないことを意味します。次に、javascript を使用してブートストラップ モーダルを閉じます。
これは、IE10、Firefox、Chrome、および Safari のウィンドウで美しく機能します。ただし iPad では、Safari では、テキストとして表示される元のページ マークアップをレンダリングすることで 204 ステータス コードに応答します。302 Not Modified も試しましたが、問題は解決しませんでした (意味的にも正しくありません)。
同様の問題を検索したところ、204 を受信したときに空白のページをレンダリングするとコードが記述されていた 2008 年の古い webkit バグへの参照のみが見つかりました。
回避策
また、Response オブジェクトの SuppressContent プロパティを true に設定しようとしました。
if (!Page.IsPostBack)
{
// Do page rendering stuff
}
else
{
Response.StatusCode = (int)HttpStatusCode.NoContent;
Response.SuppressContent = true;
}
これは、Safari が元のページ マークアップをテキストとしてレンダリングしなくなり、ブートストラップ モーダルが JavaScript 呼び出しを介して閉じられるという点で役立ちますが、Safari はモーダルに読み込まれたページの URL をアドレス バーに表示し、ページを読み込んでいるかのように動作します。しかし、決してしません。ユーザーはアプリケーションを使用して他のページをリクエストしても問題ないため、これは回避策であると考えられます。しかし、私はよりきれいなものを見つけたいと思っています。
何か考えや提案はありますか?
注: 従来の Web アプリの UI をリファクタリングしているため、ページの操作方法を完全に変更することはできません。