C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: ダウンロードダイアログのオプション設定


(過去ログ 128 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■76040 / inTopicNo.1)  ダウンロードダイアログのオプション設定
  
□投稿者/ テンテン (48回)-(2015/05/27(Wed) 11:28:06)

分類:[.NET 全般] 

開発環境
Visatual Studio2013

リンクボタン押下時にダウンロードダイアログを出力させるプログラムを記載しているのですが
下記のサイトの用に開くボタンの非表示や保存ボタンの非表示の設定をプログラムで行う場合
どのようにすればよろしいのでしょうか。
http://niyodiary.cocolog-nifty.com/blog/2009/09/aspnetcie-b7f4.html

どこのサイトを参考にして作成したか覚えていないのですが(作成したファイルのダウンロードダイアログを表示の部分)
現在は下記のコードでダウンロードダイアログを表示しており開くボタンの非表示の設定等を付け加えようとしておりますが通常のダイアログが出現しております。

'ダウンロードダイアログオプション
Select Case intFileOption
Case 0
'開くボタン非表示
sbFileOperationOptions.Append("metaDownloadOptions.Content = """""""";")
Case 1
'ダウンロードボタン非表示
sbFileOperationOptions.Append("metaDownloadOptions.Content = """"nosave"""";")
Case 2
'開くボタン非表示
sbFileOperationOptions.Append("metaDownloadOptions.Content = """"noopen"""";")
End Select

'作成したファイルのダウンロードダイアログを表示
Using readStream As New System.IO.FileStream(strFilePath, IO.FileMode.Open), _
reader As New System.IO.BinaryReader(readStream)
readStream.Position = 0
UIPage.Response.HeaderEncoding = System.Text.Encoding.GetEncoding("shift_jis")
UIPage.Response.AddHeader("Content-Type", "application/vnd.ms-excel")
UIPage.Response.AddHeader("Content-Disposition", "attachment;filename=" & UIPage.Server.UrlEncode(strDownLoadName))
UIPage.Response.BinaryWrite(reader.ReadBytes(CInt(readStream.Length)))
reader.Close()

End Using

上記で記載してあります「sbFileOperationOptions」を追加する必要があると思うのですがどのように追加すればいいのか分からない状況です。

お手数お掛けしますがご教授をお願い致します。
引用返信 編集キー/
■76041 / inTopicNo.2)  Re[1]: ダウンロードダイアログのオプション設定
□投稿者/ WebSurfer (584回)-(2015/05/27(Wed) 12:15:49)
No76040 (テンテン さん) に返信
> 開発環境
> Visatual Studio2013

対象のブラウザは何ですか?

参考にされている記事に書いてあったとおりやってもうまく行かないので
すか? 参考にされている記事のコードをコピペしてやってみて、期待し
た結果と、実際の結果がどうなったかを具体的に書けませんか?

ASP.NET Web Forms アプリの話ですよね。ご自分の開発環境をもっと詳しく
書いていただけませんか? VS2013 というだけでは、OS, IIS, ASP.NET
のバージョン他重要な情報が何も分かりません。
引用返信 編集キー/
■76042 / inTopicNo.3)  Re[2]: ダウンロードダイアログのオプション設定
□投稿者/ テンテン (49回)-(2015/05/27(Wed) 13:05:24)
No76041 (WebSurfer さん) に返信
> ■No76040 (テンテン さん) に返信
>>開発環境
>>Visatual Studio2013
>
> 対象のブラウザは何ですか?
→情報が不足してしまい申し訳ございませんでした。
 ブラウザ:IE8
 OS:Windows7
 IIS:IIS7

> 参考にされている記事に書いてあったとおりやってもうまく行かないので
> すか? 参考にされている記事のコードをコピペしてやってみて、期待し
> た結果と、実際の結果がどうなったかを具体的に書けませんか?
→参考したサイトをもう一度やり直してみます。
引用返信 編集キー/
■76043 / inTopicNo.4)  Re[2]: ダウンロードダイアログのオプション設定
□投稿者/ テンテン (50回)-(2015/05/27(Wed) 13:29:23)
> 参考にされている記事に書いてあったとおりやってもうまく行かないので
> すか? 参考にされている記事のコードをコピペしてやってみて、期待し
> た結果と、実際の結果がどうなったかを具体的に書けませんか?
→参考にしたサイトをそのままコピーした結果私がやりたい動作が出来ていました。
 上記で私が記載したコードですとダイアログは表示されるのですが
 「開く」、「保存」、「キャンセル」ボタンが表示されてしまいます。

引用返信 編集キー/
■76044 / inTopicNo.5)  Re[3]: ダウンロードダイアログのオプション設定
□投稿者/ WebSurfer (585回)-(2015/05/27(Wed) 13:49:13)
No76043 (テンテン さん) に返信

> →参考にしたサイトをそのままコピーした結果私がやりたい動作が出来ていました。
>  上記で私が記載したコードですとダイアログは表示されるのですが
>  「開く」、「保存」、「キャンセル」ボタンが表示されてしまいます。

であれば、質問者さんのコードでうまく行かない理由は、質問者さんの
コードに間違いがあるからです。

どこが間違いかは質問者さんが示した断片的なコードでは分かりません。
想像ですが meta タグの設定がうまくいってないからだと思います。

F12 開発者ツールで html ソースを見て meta タグが期待通り(参考にさ
れていた記事を見てください)になっているかチェックしてはいかが?


#以下のコードは意味不明ですが、これで meta タグの設定を行っている
とすると、このコードで期待通り設定されてるのでしょうか?

'開くボタン非表示
sbFileOperationOptions.Append("metaDownloadOptions.Content = """""""";")
・・・以下略・・・

失礼ながらメチャクチャな気がします。
引用返信 編集キー/
■76045 / inTopicNo.6)  Re[4]: ダウンロードダイアログのオプション設定
□投稿者/ テンテン (51回)-(2015/05/27(Wed) 14:12:27)
No76044 (WebSurfer さん) に返信
> であれば、質問者さんのコードでうまく行かない理由は、質問者さんの
> コードに間違いがあるからです。
>
> どこが間違いかは質問者さんが示した断片的なコードでは分かりません。
> 想像ですが meta タグの設定がうまくいってないからだと思います。
>
> F12 開発者ツールで html ソースを見て meta タグが期待通り(参考にさ
> れていた記事を見てください)になっているかチェックしてはいかが?
→承知致しました。
 一度確認してみたいと思います。
>
> #以下のコードは意味不明ですが、これで meta タグの設定を行っている
> とすると、このコードで期待通り設定されてるのでしょうか?
>
> '開くボタン非表示
> sbFileOperationOptions.Append("metaDownloadOptions.Content = """""""";")
> ・・・以下略・・・
>
> 失礼ながらメチャクチャな気がします。
→こちらこそめちゃくちゃな質問してしまい申し訳ございません。
 もう一度ダウンロードダイアログの表示から作成し直したいと思います。
引用返信 編集キー/
■76046 / inTopicNo.7)  Re[5]: ダウンロードダイアログのオプション設定
□投稿者/ ぽぴ王子 (27回)-(2015/05/27(Wed) 14:41:15)
ぽぴ王子 さんの Web サイト
No76045 (テンテン さん) に返信
とりあえず質問者さんの質問を見る限り、提示されているのはサーバーサイドの
コードですよね。

参考にしたサイトでは aspx ファイルの中にサーバーサイドのコードが書かれていて
最終的に表示される HTML ファイルの meta タグの中身を書き換えている、というのは
理解できていますでしょうか。

ひとまず落ち着いて、書いているコードがどこで実行されて、どのように影響を与える
か、考えてみた方がいいと思います。

参照先での解説では、ダウンロード処理へ遷移するページの meta タグに特定の内容
を設定することでダイアログボタンの表示制御ができるとされています。
それを実現しているのが、サンプルの

        HtmlMeta metaDownloadOptions = (HtmlMeta)Header.FindControl("metaDownloadOptions");
        switch (rblOpenSave.SelectedValue)
        {
            case "nosave":
                metaDownloadOptions.Content = "nosave";
                break;
            case "noopen":
                metaDownloadOptions.Content = "noopen";
                break;
            default:
                metaDownloadOptions.Content = "";
                break;
        }

というコードのあたりです。
このコードはサーバーサイドで実行されるので、実際には aspx から変換される HTML
ファイル上の metaDownloadOptions という名前のコントロールに影響を与えます。

<head runat="server">
    <title>ファイルダウンロードダイログのボタンをカスタマイズ</title>
    <meta id="metaDownloadOptions" runat="server" name="DownloadOptions" content="noopen" />
</head>

はい、この部分です。
metaDownloadOptions は、これもまたサーバーサイドコントロールになっているため
サーバーサイドコードから FindControl でコントロールを検索し、その Content プロパティ
を書き換えるコードです。

もとにしたコードがサーバーサイドで実行されるもので、それが meta タグを書き換える
ためのものであるというところが理解されていないように思います。


もうひとつ。

提示されたコードの

>                     '開くボタン非表示
>                     sbFileOperationOptions.Append("metaDownloadOptions.Content = """""""";")

という部分ですが、上記サンプルの

>             case "nosave":
>                 metaDownloadOptions.Content = "nosave";
>                 break;

という部分を模しているようで、実際にはサンプルはサーバーサイドのコードである
わけですが、提示されたコードはただの文字列にすぎません。
文字列では実行もできませんし、このままでは単に文字列を生成しただけで
何もできていません。
なので

> 上記で記載してあります「sbFileOperationOptions」を追加する必要があると思うのですがどのように追加すればいいのか分からない状況です。

ということになるのかと思いますが、そもそも sbFileOperationOptions の「中身」
が実行されるわけではないので aspx ファイルの中に出力されるようにしたと
しても、無視されるあるいは JavaScript エラーになる可能性が高いです。


サンプルコードは、ラジオボタンでダイアログオプションを切り替えられるようにして
ラジオボタンが選択されたらポストバックされるようになっています。
その結果選択されたラジオボタンの内容をもとに、サーバーサイドで meta タグを
書き換えていて、書き換えられた meta タグがクライアントサイドで解釈され
ダウンロードする際にダイアログのボタン表示を切り替えているという感じです。

サンプルなのでそういった処理になっていますが、たとえば

>             'ダウンロードダイアログオプション
>             Select Case intFileOption

この「ダウンロードダイアログオプション」が固定だった場合、あるいはユーザー
が選択する必要がない場合は、最初から決まった内容で meta タグを書き換えて
しまえばいいわけですよね。
その場合は aspx ファイルのヘッダー部分をサンプルのように

<head runat="server">
    <meta id="metaDownloadOptions" runat="server" name="DownloadOptions" content="noopen" />
</head>

こんな感じで設定しておいて、サーバーサイドで meta タグを操作できるように
しておきます。
そしてその内容を

        // ヘッダーから meta タグを検索
        HtmlMeta metaDownloadOptions = (HtmlMeta)Header.FindControl("metaDownloadOptions");
        // meta タグのコンテンツを書き換える
        metaDownloadOptions.Content = "nosave";

といった感じでサーバーサイドのコードに書いてやります。


とりあえず言えることは、なんでも一気に理解しようとするとゴチャゴチャして
しまうので、最低限動くような小さなサンプルコードを書いてみて、そこから
ちょっとずつ理解をしていくことが大事ではないかと思います。

長くなってしまいましたが、よろしくお願いします。

引用返信 編集キー/
■76049 / inTopicNo.8)  Re[6]: ダウンロードダイアログのオプション設定
□投稿者/ テンテン (52回)-(2015/05/27(Wed) 16:30:01)
ぽぴ王子さん返信ありがとうございます。
ぽぴ王子さんの詳細な説明してを見た結果無事にやりたい動作をすることが出来ました。
本当にありがとうございました。




解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -