QA@IT
«質問へ戻る

分かりにくい質問文だったので編集して質問し直させていただきます。

0
タイトル
ASP.NETでファイルのダウンロードと画面制御
ASP.NETでJavaScriptが動かなくなります
本文
-ASP.NETで画面の「Excel出力」ボタンを押下時に
-「処理中です」というポップアップを表示して画面を操作できないようにし
-Excel出力処理を行ったらポップアップを消す
-という処理を組み込もうと思っています。
+分かりにくい質問文だったので
+編集して質問し直させていただきます。
 
-ポップアップはjquery.blockUI.jsを使用しています。
+ASP.NETでJavaScriptが動かなくなって困っています。
 
-Excel出力処理はダミーのページ(DownloadPage.aspx)を用意して
-隠しiframeで表示し、そちらで実行しています。
+ボタン押下時にiframeでダミーのページを参照するために
+ClientScript.RegisterStartupScriptでJavaScriptを登録すると
+それまで動いていたJavaScriptが動かなくなってしまいます。
 
+環境は
+OSはWindows8.1
+.NET Framework4
+IISは8.5
+ブラウザはIE11
+です。
 
+参考までにソースを載せます。
+
+「Excel出力」ボタン押下時に
+ClientScript.RegisterStartupScriptでJavaScriptの登録を行っており
+その後、それまで正常に動いていたJavaScriptが動かなくなります。
+
 <Excel出力ページ>
 ExcelOutput.aspx
 ```cs
 protected void ExcelOutputButton_Click(object sender, EventArgs e)
 {
     ~略~
-    //-----------------------------------------------------------------------------------------
-    // ファイルダウンロード(隠しiframeタグ内にダウンロードページを開く)
-    //-----------------------------------------------------------------------------------------
+    //------------------------------------------------
+    // ファイルダウンロード
+    // (隠しiframeタグ内にダウンロードページを開く)
+    //------------------------------------------------
     // JavaScript作成
     string sScript = "<script type='text/javascript'>InsertIFrameDownloadPage('DownloadPage.aspx');</script>";
     // JavaScript登録
 }
 ```
 
+具体的に処理の内容を説明しますと
+「Excel出力」ボタンを押下時に「処理中です」というポップアップを表示して
+画面を操作できないようにし、Excel出力処理を行ったらポップアップを消す
+という処理を組み込んでいます。
+
+ポップアップはjquery.blockUI.jsを使用しています。
+
+Excel出力処理はダミーのページ(DownloadPage.aspx)を用意して
+隠しiframeで表示し、そちらで実行しています。
 画面の制御もExcel出力も正常に行われるのですが
 その後、それまで正常に動いていたJavaScriptが動かなくなってしまいます。
 
 上記の例ですと「全て」CheckBoxをOnにしたら「テスト1」「テスト2」CheckBoxもOnにする
 という部分のスクリプトです。
 
-Excel出力実行前には正常に動くので
-スクリプトの記述に誤りはないと思うのですが。
+Excel出力実行前には正常に動くのですが。
 
 ちなみに、ChromeだとExcel出力処理後も正常に動きます。
-IE11(互換モード)だと動かなくなります。
+ユーザのブラウザはIEなのでIEでも動くようにしたいのですが
+なぜChromeだと動いてIEでは動かないのか分かりません。
 
 どなたかご教授願いませんでしょうか。
タグ

ASP.NETでJavaScriptが動かなくなります

分かりにくい質問文だったので
編集して質問し直させていただきます。

ASP.NETでJavaScriptが動かなくなって困っています。

ボタン押下時にiframeでダミーのページを参照するために
ClientScript.RegisterStartupScriptでJavaScriptを登録すると
それまで動いていたJavaScriptが動かなくなってしまいます。

環境は
OSはWindows8.1
.NET Framework4
IISは8.5
ブラウザはIE11
です。

参考までにソースを載せます。

「Excel出力」ボタン押下時に
ClientScript.RegisterStartupScriptでJavaScriptの登録を行っており
その後、それまで正常に動いていたJavaScriptが動かなくなります。

<Excel出力ページ>
ExcelOutput.aspx

<script language="javascript" type="text/javascript">

//「処理中です」ポップアップを出す
function block() {
  $.blockUI({ message: '<p><img src="images/ajax-loader.gif" style="vertical-align:middle;" /> 処理中です</p>' });
}

// ダウンロードページをiframeタグ内で開く
function InsertIFrameDownloadPage(sUrl) {
    document.getElementById('ifDownloadPage').contentWindow.location.href = sUrl;
}

//「全て」CheckBoxがOnになったら「テスト1」「テスト2」CheckBoxもOn
$(function () {
    $('.testCheckAll').click(
        function () {
            $(".test_list :checkbox").attr('checked', $('.testCheckAll').is(':checked'));
        })
})
</script>

~~~~~~

<!-- 「全て」CheckBoxと「テスト1」「テスト2」CheckBoxList -->
<input id="testCheckAll" type="checkbox"  runat="server" name="testCheckAll" checked="checked" value="ON" class="testCheckAll" />全て
<br />
<asp:CheckBoxList ID="testCheckBoxList" runat="server" >
    <asp:ListItem Selected="True" Value="1" class="test_list">テスト1</asp:ListItem>
    <asp:ListItem Selected="True" Value="2" class="test_list">テスト2</asp:ListItem>
</asp:CheckBoxList>

<!-- Excel出力ボタン -->
<asp:Button ID="ExcelOutputButton" runat="server" Text="Excel出力" onclick="ExcelOutputButton_Click" onclientclick="block();" />

<!-- 隠しiframeExcelダウンロード用) -->
<iframe id="ifDownloadPage" style="visibility:hidden"></iframe>

ExcelOutput.aspx.cs

/ Excel出力ボタン押下
protected void ExcelOutputButton_Click(object sender, EventArgs e)
{
    ~略~
    //------------------------------------------------
    // ファイルダウンロード
    // (隠しiframeタグ内にダウンロードページを開く)
    //------------------------------------------------
    // JavaScript作成
    string sScript = "<script type='text/javascript'>InsertIFrameDownloadPage('DownloadPage.aspx');</script>";
    // JavaScript登録
    ClientScript.RegisterStartupScript(GetType(), "HiddenDownloadPage", sScript);
    ~略~
}

<Excel出力用のダミーページ>
DownloadPage.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    SpreadsheetGear.IWorkbook workbook = Session["workbook"] as SpreadsheetGear.IWorkbook;
    string outputFileName = Session["outputFileName"] as string;

    Response.Clear();
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + outputFileName);
    workbook.SaveToStream(Response.OutputStream, SpreadsheetGear.FileFormat.Excel8);
    Response.End();
}

具体的に処理の内容を説明しますと
「Excel出力」ボタンを押下時に「処理中です」というポップアップを表示して
画面を操作できないようにし、Excel出力処理を行ったらポップアップを消す
という処理を組み込んでいます。

ポップアップはjquery.blockUI.jsを使用しています。

Excel出力処理はダミーのページ(DownloadPage.aspx)を用意して
隠しiframeで表示し、そちらで実行しています。
画面の制御もExcel出力も正常に行われるのですが
その後、それまで正常に動いていたJavaScriptが動かなくなってしまいます。

上記の例ですと「全て」CheckBoxをOnにしたら「テスト1」「テスト2」CheckBoxもOnにする
という部分のスクリプトです。

Excel出力実行前には正常に動くのですが。

ちなみに、ChromeだとExcel出力処理後も正常に動きます。
ユーザのブラウザはIEなのでIEでも動くようにしたいのですが
なぜChromeだと動いてIEでは動かないのか分かりません。

どなたかご教授願いませんでしょうか。

分かりにくい質問文だったので
編集して質問し直させていただきます。

ASP.NETでJavaScriptが動かなくなって困っています。

ボタン押下時にiframeでダミーのページを参照するために
ClientScript.RegisterStartupScriptでJavaScriptを登録すると
それまで動いていたJavaScriptが動かなくなってしまいます。

環境は
OSはWindows8.1
.NET Framework4
IISは8.5
ブラウザはIE11
です。

参考までにソースを載せます。

「Excel出力」ボタン押下時に
ClientScript.RegisterStartupScriptでJavaScriptの登録を行っており
その後、それまで正常に動いていたJavaScriptが動かなくなります。

<Excel出力ページ>
ExcelOutput.aspx
```cs
<script language="javascript" type="text/javascript">

//「処理中です」ポップアップを出す
function block() {
  $.blockUI({ message: '<p><img src="images/ajax-loader.gif" style="vertical-align:middle;" /> 処理中です</p>' });
}

// ダウンロードページをiframeタグ内で開く
function InsertIFrameDownloadPage(sUrl) {
    document.getElementById('ifDownloadPage').contentWindow.location.href = sUrl;
}

//「全て」CheckBoxがOnになったら「テスト1」「テスト2」CheckBoxもOn
$(function () {
    $('.testCheckAll').click(
        function () {
            $(".test_list :checkbox").attr('checked', $('.testCheckAll').is(':checked'));
        })
})
</script>

~~~~~~

<!-- 「全て」CheckBoxと「テスト1」「テスト2」CheckBoxList -->
<input id="testCheckAll" type="checkbox"  runat="server" name="testCheckAll" checked="checked" value="ON" class="testCheckAll" />全て
<br />
<asp:CheckBoxList ID="testCheckBoxList" runat="server" >
    <asp:ListItem Selected="True" Value="1" class="test_list">テスト1</asp:ListItem>
    <asp:ListItem Selected="True" Value="2" class="test_list">テスト2</asp:ListItem>
</asp:CheckBoxList>

<!-- Excel出力ボタン -->
<asp:Button ID="ExcelOutputButton" runat="server" Text="Excel出力" onclick="ExcelOutputButton_Click" onclientclick="block();" />

<!-- 隠しiframe(Excelダウンロード用) -->
<iframe id="ifDownloadPage" style="visibility:hidden"></iframe>
```


ExcelOutput.aspx.cs
```cs
/ Excel出力ボタン押下
protected void ExcelOutputButton_Click(object sender, EventArgs e)
{
    ~略~
    //------------------------------------------------
    // ファイルダウンロード
    // (隠しiframeタグ内にダウンロードページを開く)
    //------------------------------------------------
    // JavaScript作成
    string sScript = "<script type='text/javascript'>InsertIFrameDownloadPage('DownloadPage.aspx');</script>";
    // JavaScript登録
    ClientScript.RegisterStartupScript(GetType(), "HiddenDownloadPage", sScript);
    ~略~
}
```


<Excel出力用のダミーページ>
DownloadPage.aspx.cs
```cs
protected void Page_Load(object sender, EventArgs e)
{
    SpreadsheetGear.IWorkbook workbook = Session["workbook"] as SpreadsheetGear.IWorkbook;
    string outputFileName = Session["outputFileName"] as string;

    Response.Clear();
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + outputFileName);
    workbook.SaveToStream(Response.OutputStream, SpreadsheetGear.FileFormat.Excel8);
    Response.End();
}
```

具体的に処理の内容を説明しますと
「Excel出力」ボタンを押下時に「処理中です」というポップアップを表示して
画面を操作できないようにし、Excel出力処理を行ったらポップアップを消す
という処理を組み込んでいます。

ポップアップはjquery.blockUI.jsを使用しています。

Excel出力処理はダミーのページ(DownloadPage.aspx)を用意して
隠しiframeで表示し、そちらで実行しています。
画面の制御もExcel出力も正常に行われるのですが
その後、それまで正常に動いていたJavaScriptが動かなくなってしまいます。

上記の例ですと「全て」CheckBoxをOnにしたら「テスト1」「テスト2」CheckBoxもOnにする
という部分のスクリプトです。

Excel出力実行前には正常に動くのですが。

ちなみに、ChromeだとExcel出力処理後も正常に動きます。
ユーザのブラウザはIEなのでIEでも動くようにしたいのですが
なぜChromeだと動いてIEでは動かないのか分かりません。

どなたかご教授願いませんでしょうか。

質問を投稿

ASP.NETでファイルのダウンロードと画面制御

ASP.NETで画面の「Excel出力」ボタンを押下時に
「処理中です」というポップアップを表示して画面を操作できないようにし
Excel出力処理を行ったらポップアップを消す
という処理を組み込もうと思っています。

ポップアップはjquery.blockUI.jsを使用しています。

Excel出力処理はダミーのページ(DownloadPage.aspx)を用意して
隠しiframeで表示し、そちらで実行しています。

<Excel出力ページ>
ExcelOutput.aspx

<script language="javascript" type="text/javascript">

//「処理中です」ポップアップを出す
function block() {
  $.blockUI({ message: '<p><img src="images/ajax-loader.gif" style="vertical-align:middle;" /> 処理中です</p>' });
}

// ダウンロードページをiframeタグ内で開く
function InsertIFrameDownloadPage(sUrl) {
    document.getElementById('ifDownloadPage').contentWindow.location.href = sUrl;
}

//「全て」CheckBoxがOnになったら「テスト1」「テスト2」CheckBoxもOn
$(function () {
    $('.testCheckAll').click(
        function () {
            $(".test_list :checkbox").attr('checked', $('.testCheckAll').is(':checked'));
        })
})
</script>

~~~~~~

<!-- 「全て」CheckBoxと「テスト1」「テスト2」CheckBoxList -->
<input id="testCheckAll" type="checkbox"  runat="server" name="testCheckAll" checked="checked" value="ON" class="testCheckAll" />全て
<br />
<asp:CheckBoxList ID="testCheckBoxList" runat="server" >
    <asp:ListItem Selected="True" Value="1" class="test_list">テスト1</asp:ListItem>
    <asp:ListItem Selected="True" Value="2" class="test_list">テスト2</asp:ListItem>
</asp:CheckBoxList>

<!-- Excel出力ボタン -->
<asp:Button ID="ExcelOutputButton" runat="server" Text="Excel出力" onclick="ExcelOutputButton_Click" onclientclick="block();" />

<!-- 隠しiframeExcelダウンロード用) -->
<iframe id="ifDownloadPage" style="visibility:hidden"></iframe>

ExcelOutput.aspx.cs

/ Excel出力ボタン押下
protected void ExcelOutputButton_Click(object sender, EventArgs e)
{
    ~略~
    //-----------------------------------------------------------------------------------------
    // ファイルダウンロード(隠しiframeタグ内にダウンロードページを開く)
    //-----------------------------------------------------------------------------------------
    // JavaScript作成
    string sScript = "<script type='text/javascript'>InsertIFrameDownloadPage('DownloadPage.aspx');</script>";
    // JavaScript登録
    ClientScript.RegisterStartupScript(GetType(), "HiddenDownloadPage", sScript);
    ~略~
}

<Excel出力用のダミーページ>
DownloadPage.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    SpreadsheetGear.IWorkbook workbook = Session["workbook"] as SpreadsheetGear.IWorkbook;
    string outputFileName = Session["outputFileName"] as string;

    Response.Clear();
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + outputFileName);
    workbook.SaveToStream(Response.OutputStream, SpreadsheetGear.FileFormat.Excel8);
    Response.End();
}

画面の制御もExcel出力も正常に行われるのですが
その後、それまで正常に動いていたJavaScriptが動かなくなってしまいます。

上記の例ですと「全て」CheckBoxをOnにしたら「テスト1」「テスト2」CheckBoxもOnにする
という部分のスクリプトです。

Excel出力実行前には正常に動くので
スクリプトの記述に誤りはないと思うのですが。

ちなみに、ChromeだとExcel出力処理後も正常に動きます。
IE11(互換モード)だと動かなくなります。

どなたかご教授願いませんでしょうか。

ASP.NETで画面の「Excel出力」ボタンを押下時に
「処理中です」というポップアップを表示して画面を操作できないようにし
Excel出力処理を行ったらポップアップを消す
という処理を組み込もうと思っています。

ポップアップはjquery.blockUI.jsを使用しています。

Excel出力処理はダミーのページ(DownloadPage.aspx)を用意して
隠しiframeで表示し、そちらで実行しています。


<Excel出力ページ>
ExcelOutput.aspx
```cs
<script language="javascript" type="text/javascript">

//「処理中です」ポップアップを出す
function block() {
  $.blockUI({ message: '<p><img src="images/ajax-loader.gif" style="vertical-align:middle;" /> 処理中です</p>' });
}

// ダウンロードページをiframeタグ内で開く
function InsertIFrameDownloadPage(sUrl) {
    document.getElementById('ifDownloadPage').contentWindow.location.href = sUrl;
}

//「全て」CheckBoxがOnになったら「テスト1」「テスト2」CheckBoxもOn
$(function () {
    $('.testCheckAll').click(
        function () {
            $(".test_list :checkbox").attr('checked', $('.testCheckAll').is(':checked'));
        })
})
</script>

~~~~~~

<!-- 「全て」CheckBoxと「テスト1」「テスト2」CheckBoxList -->
<input id="testCheckAll" type="checkbox"  runat="server" name="testCheckAll" checked="checked" value="ON" class="testCheckAll" />全て
<br />
<asp:CheckBoxList ID="testCheckBoxList" runat="server" >
    <asp:ListItem Selected="True" Value="1" class="test_list">テスト1</asp:ListItem>
    <asp:ListItem Selected="True" Value="2" class="test_list">テスト2</asp:ListItem>
</asp:CheckBoxList>

<!-- Excel出力ボタン -->
<asp:Button ID="ExcelOutputButton" runat="server" Text="Excel出力" onclick="ExcelOutputButton_Click" onclientclick="block();" />

<!-- 隠しiframe(Excelダウンロード用) -->
<iframe id="ifDownloadPage" style="visibility:hidden"></iframe>
```


ExcelOutput.aspx.cs
```cs
/ Excel出力ボタン押下
protected void ExcelOutputButton_Click(object sender, EventArgs e)
{
    ~略~
    //-----------------------------------------------------------------------------------------
    // ファイルダウンロード(隠しiframeタグ内にダウンロードページを開く)
    //-----------------------------------------------------------------------------------------
    // JavaScript作成
    string sScript = "<script type='text/javascript'>InsertIFrameDownloadPage('DownloadPage.aspx');</script>";
    // JavaScript登録
    ClientScript.RegisterStartupScript(GetType(), "HiddenDownloadPage", sScript);
    ~略~
}
```


<Excel出力用のダミーページ>
DownloadPage.aspx.cs
```cs
protected void Page_Load(object sender, EventArgs e)
{
    SpreadsheetGear.IWorkbook workbook = Session["workbook"] as SpreadsheetGear.IWorkbook;
    string outputFileName = Session["outputFileName"] as string;

    Response.Clear();
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + outputFileName);
    workbook.SaveToStream(Response.OutputStream, SpreadsheetGear.FileFormat.Excel8);
    Response.End();
}
```

画面の制御もExcel出力も正常に行われるのですが
その後、それまで正常に動いていたJavaScriptが動かなくなってしまいます。

上記の例ですと「全て」CheckBoxをOnにしたら「テスト1」「テスト2」CheckBoxもOnにする
という部分のスクリプトです。

Excel出力実行前には正常に動くので
スクリプトの記述に誤りはないと思うのですが。

ちなみに、ChromeだとExcel出力処理後も正常に動きます。
IE11(互換モード)だと動かなくなります。

どなたかご教授願いませんでしょうか。