LOGO

sponsor.jpg

   ホーム      
 | 
  
   イベント      
 | 
  
   コラム      
 | 
  
   連載      
 | 
  
   フォーラム      
 | 
  
   VSUG      
 | 
  
   スタッフ日記      
 | 
  
   VSUG キャスト   
会員サービス
メンバー ログイン
新規会員登録はこちら
MENU
ホーム
イベント
VSUG アカデミー
VSUG Day
その他のイベント
コラム
連載
基本
LINQ
リッチクライアント
ASP.NET
フォーラム
初心者フォーラム
Visual Studio
.NET 開発
プラットフォーム運用
フリートーク・お知らせ
フォーラムの利用案内
VSUG
VSUGとは
フォーラムリーダー紹介
ガジェット
スタッフ日記
VSUG キャスト
第 1 回 近藤 和彦 氏
第 2 回 長沢 智治 氏
フォーラムグループ
初心者フォーラム
初心者なんでも相談室
Visual Studio
Visual Studio 2005
Visual Studio 旧環境
.NET 開発
Visual Basic
Visual C#
Visual C++/CLI その他
Web アプリケーション
リッチクライアント・UI コントロール
データベース・データアクセス
モバイル・スマートクライアント
.NET Framework
開発プロセス
マイグレーション・COM 相互運用
Office 開発・VSTO
Web ホスティングアプリケーション
ライティング・セキュアコード
プラットフォーム運用
運用管理
フリートーク・お知らせ
談話室
VSUGからのお知らせ
フォーラムの利用案内
インフォメーション
会員規約
会員登録
プライバシーポリシー
リンクポリシー
著作権について
スポンサーについて
お問い合わせ
オンライン状態
オンライン状況 オンライン状態:
未登録ユーザー 未登録ユーザー: 117
登録ユーザー 登録ユーザー: 0
計 計: 117

オンライン中のユーザー オンライン中のユーザー:

 
  VSUG フォーラム  .NET 開発  Web アプリケーション  IE7のバグなのでしょうか?
前へ 前へ
 
次へ 次へ
新しい投稿 2006/11/06 9:29
ユーザーはオフラインです。 菊池ボーイ
16件の投稿
ランキングデータがありません


IE7のバグなのでしょうか? 
修正者: 菊池ボーイ   2006/11/06 12:46:48)
言語:C# / Ver:2005 / プラットフォーム:Windows XP

皆様お疲れ様です。

少し前にもお世話になったのですが、
また、わからない事がでてきましたので

環境:WindowsXP+IE7

画面の動き:

1.画面Aのボタンをクリックする
  ↓
2.JavaScriptにより画面Bが起動
  ↓
3.ファイルダウンロード処理

このような流れなのですが、
3のダウンロード処理が
行われる時と行われない時があります。
(止まってしまう時は、ファイルダウンロードダイアログのダウンロード先が空白になっていて、動く時はダウンロード先
に「一時ディレクトリ」と表示されています)

試しに、ほかのパソコン(2000+IE6、XP+IE6)
で動かしたところ、こちらの方では問題なく動きました。
皆様は同様な現象が起きてませんでしょうか?

<画面Bのダウンロード処理プログラム>

Repeater repeater = this.Repeater1;
repeater.DataSource = table;
repeater.DataBind();

Page     page = new Page();
HtmlForm form = new HtmlForm();
 
form.Controls.Add(repeater);
page.Controls.Add(form);
 

using(StringWriter sWriter   = new StringWriter())
using(HtmlTextWriter hWriter = new HtmlTextWriter(sWriter)) {
 
 try {
 
  page.RenderControl(hWriter);
  
  Response.Clear();
  
  Response.AddHeader("Content-Disposition", "attachment;filename=Test.xls");
  Response.ContentType = "Application/vnd.ms-excel";
  Response.Charset = "UTF-8";
  Response.Write(string.Format("
   
   
    
   
   {0}
   ", sWriter.ToString()));
  
  hWriter.Close();
  sWriter.Close();
 
 } catch(Exception ex) {
  string ss = ex.Message;
 } 
}

Response.Flush();
//Response.End(); HttpContext.Current.ApplicationInstance.CompleteRequest();


余談ですが...
IE7で投稿すると、何故か改行が消えてしまうようですね。

 
新しい投稿 2006/11/06 22:17
ユーザーはオフラインです。 Jitta
40件の投稿
blogs.wankuma.com/jitta/
ランキングデータがありません


RE: IE7のバグなのでしょうか? 
修正者: Jitta   2006/11/06 22:21:08)
Response.AddHeader("Content-Disposition", "attachment;filename=Test.xls");
Response.ContentType = "Application/vnd.ms-excel";
Response.Charset = "UTF-8";
Response.Write(string.Format("
   <html>
   <head>
    <meta http-equiv='Content-Type' content='text/html;charset=utf-8' />
   </head>
   <body>{0}</body>
   </html>", sWriter.ToString()));

ん?どうして、"Attached" なのに、本文の body の中に、、、って、あれ?body の中に、何が書かれる?わけわかんね

追加:なんか、< とか理解してくれないので、全角になおした。

なんか、 IE7 だと、HTML 直接入力モードになるみたい???


Jitta@わんくま同盟
 
新しい投稿 2006/11/07 9:38
ユーザーはオフラインです。 菊池ボーイ
16件の投稿
ランキングデータがありません


RE: IE7のバグなのでしょうか? 
修正者: 菊池ボーイ   2006/11/07 9:43:16)
ご返信ありがとうございます。
Attachedの時は<body>タグなどはいらないのですね。
後、<body>タグに囲まれている{0}の部分には
Repeaterコントロールで作成される<table>コントロールが
書き込まれます。
ご指摘していただいたところを直してみましたが
現象は同じままみたいです。

Repeater repeater = this.Repeater1;
repeater.DataSource = table;
repeater.DataBind();

Page page = new Page();
HtmlForm form = new HtmlForm();

form.Controls.Add(repeater);
page.Controls.Add(form);

using(StringWriter sWriter = new StringWriter())
using(HtmlTextWriter hWriter = new HtmlTextWriter(sWriter)) {

try {

page.RenderControl(hWriter);

Response.Clear();

Response.AddHeader("Content-Disposition", "attachment;filename=Test.xls");
Response.ContentType = "Application/vnd.ms-excel";
Response.Charset = "UTF-8";

//metaタグは残さないとエクセルで表示する時に文字化けしてしまう
Response.Write(string.Format("
{0}", sWriter.ToString()));

hWriter.Close();
sWriter.Close();

} catch(Exception ex) {
string ss = ex.Message;
}
}

Response.Flush();

//CompleteRequest()のままだとaspxの内容が出力されてしまい
//エクセルで表示できなくなってしまうのでResponse.End()を使用する
Response.End();
//HttpContext.Current.ApplicationInstance.CompleteRequest();
 
新しい投稿 2006/11/08 21:24
ユーザーはオフラインです。 Jitta
40件の投稿
blogs.wankuma.com/jitta/
ランキングデータがありません


RE: IE7のバグなのでしょうか? 

HTML を .xls と偽ってダウンロードさせるんですか?
それだったら、ContentType を変えて、aspx はそのまま処理させた方がデバッグしやすいんじゃない?

とりあえず、ContentType を削って、タグがきちんと閉じているか、確認してみては?

タイトルに対して答えると、IE7 のバグではなく、IE6 以前のバグ、でしょうね。
現象だけ見て判断していると、「たまたまうまくいっているように見えている」ことを、「うまくいく」と判断してしまいがちです。気をつけましょう。


Jitta@わんくま同盟
 
新しい投稿 2006/11/09 11:49
ユーザーはオフラインです。 菊池ボーイ
16件の投稿
ランキングデータがありません


RE: IE7のバグなのでしょうか? 
修正者: 菊池ボーイ   2006/11/09 12:01:22)
Jitta殿ご返信ありがとうございます。

ご指摘の通りContentTypeを消してみましたが、
タグはきちんと閉じていて現象は変わらずでした。

話は少し変わるのですが、以下のプログラムを動かしたところ
開くはできるのですが、保存選択すると上記の現象のように
ダウンロードダイログで止まってしまいます。
attachmentが悪の元凶なのでしょうか・・・
それとも私のPCが・・・・


-------Default1.aspx------
<head runat="server">
<title>無題のページ</title>
<script type="text/javascript">

function buttonClick() {
window.open("Default2.aspx", "xls", "");
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="button" value="ボタン" onclick="buttonClick();" />
</form>
</body>
-------Default1.aspx------

-------Default2.aspx------
<head id="Head1" runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>カラム1</th>
<th>カラム2</th>
<th>カラム3</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem, "カラム1") %></td>
<td><%# DataBinder.Eval(Container.DataItem, "カラム1") %></td>
<td><%# DataBinder.Eval(Container.DataItem, "カラム1") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>
</body>
-------Default2.aspx------

-------Default2.aspx.cs------
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

try {

DataTable table = new DataTable();
table.Columns.Add("カラム1", typeof(string));
table.Columns.Add("カラム2", typeof(string));
table.Columns.Add("カラム3", typeof(string));

DataRow row1 = table.NewRow();
row1["カラム1"] = "AAA";
row1["カラム2"] = "BBB";
row1["カラム3"] = "CCC";
table.Rows.Add(row1);

DataRow row2 = table.NewRow();
row2["カラム1"] = "DDD";
row2["カラム2"] = "EEE";
row2["カラム3"] = "FFF";
table.Rows.Add(row2);

Repeater repeater = this.Repeater1;
repeater.DataSource = table;
repeater.DataBind();

Response.AddHeader("Content-Disposition", "attachment");

} catch(Exception exx) {
string s = exx.Message;
}


}
}
-------Default2.aspx.cs------
※上のソースの括弧は全角にしてあります。
長くてすみません。
 
新しい投稿 2006/11/13 22:56
ユーザーはオフラインです。 Jitta
40件の投稿
blogs.wankuma.com/jitta/
ランキングデータがありません


RE: IE7のバグなのでしょうか? 

関連がありそうなので、相互リンク
→ @IT


Jitta@わんくま同盟
 
新しい投稿 2006/11/14 3:46
ユーザーはオフラインです。 kazuk
413件の投稿
7位




RE: IE7のバグなのでしょうか? 

関連リンクありがとうございます。

@IT側まで見た感じでは、

Content-DispositionのfilenameをURL Encodedで渡すと駄目ですね。(もちろん、Headerに設定する場合、AddHeaderがUrlEncodeをかけるので、URL Encodedでは無く、raw filename を渡すべきですね。)

後は ContentType で Application/Octet-Stream 時は、Octet-Streamなんだからバイナリファイルで、エンコーディングもくそもないので、文字セットを指定しない方が正しいですね。

IE7 のバグというよりは、厳密に解釈するので、こうすればなんとなく行けていたという迷信にひびが入ったぐらいですかねぇ。

Response.ContentType = "Application/Octet-Stream"
Response.AppendHeader( "Content-Disposition",
       "attachment;filename="+エンコードしていないないファイル名の文字列 )
Response.AppendHeader( "Content-Transfer-Encoding","base64" )

を HttpHandler では基本とした方が良いと思います。

Content-Transfer-Encoding は8bitでContent-Lengthを指定した方が転送効率は良さそうな気がします。(base64で3割増しぐらいになってしまうので)

もちろん、Octet-StreamなのでHTMLのMETAでChar-Setを合わせるとかはせずにストリームが丸々送信ファイルですね。


Kazuhiko Kikuchi
Microsoft Most Valueable Professional - Visual C# 2005
 
新しい投稿 2006/11/16 17:06
ユーザーはオフラインです。 菊池ボーイ
16件の投稿
ランキングデータがありません


RE: IE7のバグなのでしょうか? 
修正者: 菊池ボーイ   2006/11/16 17:08:00)
返信遅くなりました。

Jittaさん相互リンクありがとうございます。
私の他にも同様な現象で悩まれている方がいらっしゃたのですね。


近況としましては、
ContentTypeに"application/octet-stream"を設定したり
色々と試行錯誤しております。
CrystalReportsを使って帳票出力もやってみましたが
同様の現象が起きてしまってます・・・・


一応ソースです↓
using(ReportDocument report = new ReportDocument()) {

report.Load(Server.MapPath("Test.rpt"));

DataTable table = new DataTable();
table.Columns.Add("データ", typeof(int));

DataRow row1 = table.NewRow();
row1["データ"] = 1;
table.Rows.Add(row1);

report.SetDataSource(table);

report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, this.Response, true, "Test.pdf");
}

Response.End();
 
新しい投稿 2006/11/17 13:10
ユーザーはオフラインです。 atsnow
3件の投稿
ランキングデータがありません


RE: IE7のバグなのでしょうか? 
同様の現象で悩んでいました。 キャッシュの問題だと思い、いろいろ設定を変えたりしたのですが、結局window.open(url)でファイルダウンロードをさせるページを開いて処理している部分を同一ページ内のフレームで処理させるようにしたらダウンロードできるようになりました。 download.location='Download.aspx' <iframe id="download">
 
新しい投稿 2006/11/17 13:10
ユーザーはオフラインです。 atsnow
3件の投稿
ランキングデータがありません


RE: IE7のバグなのでしょうか? 
同様の現象で悩んでいました。 キャッシュの問題だと思い、いろいろ設定を変えたりしたのですが、結局window.open(url)でファイルダウンロードをさせるページを開いて処理している部分を同一ページ内のフレームで処理させるようにしたらダウンロードできるようになりました。 download.location='Download.aspx' <iframe id="download">
 
新しい投稿 2006/11/17 13:10
ユーザーはオフラインです。 atsnow
3件の投稿
ランキングデータがありません


RE: IE7のバグなのでしょうか? 
同様の現象で悩んでいました。 キャッシュの問題だと思い、いろいろ設定を変えたりしたのですが、結局window.open(url)でファイルダウンロードをさせるページを開いて処理している部分を同一ページ内のフレームで処理させるようにしたらダウンロードできるようになりました。 download.location='Download.aspx' <iframe id="download">
 
新しい投稿 2007/12/21 12:00
ユーザーはオフラインです。 菊池ボーイ
16件の投稿
ランキングデータがありません


RE: IE7のバグなのでしょうか? 

もう見る方はいなかもしれませんが、
http://support.microsoft.com/kb/932823/ja
が出ました。

更新プログラムをインストールして
試したところ、ダウンロードが止まる事は
今のところ起きてないです。
 
 1/3ページ123次へ 
前へ 前へ
 
次へ 次へ
  VSUG フォーラム  .NET 開発  Web アプリケーション  IE7のバグなのでしょうか?
ログイン | © 2005-2008 Visual Studio User Group. All rights reserved. 著作権について | プライバシーポリシー | リンクポリシー | お問合せ