質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

18064閲覧

ASP.netでC#からJavascriptへデータを送りたい

wako.kasaoka

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2018/03/23 06:00

編集2018/03/23 08:18

前提・実現したいこと

VisualStudio2017を使用して、進捗カレンダーを作成しています。
Fullcalendarをベースに、カレンダーに表示されている項目をクリックした時、PDFを出力されようと考えています。
Javascript側でPageMethodsを使いC#でDBから情報を取ってこようとしていますが、C#側では取れている情報をうまくJavascript側へ渡せません。
C#のplaceには、DBからPDFが格納されているURLが入っているところまでは確認できています。
このC#のplaceをJavascriptへ渡し、PDFを表示させる方法を教えていただけませんか?
なんとなくJSONを使えば出来そうとまでは、ネットで調べたのですが、実現方法がわかりません。
また、もっと良い方法があればご教授いただければと考えています。
お手数をおかけいたしますが、よろしくお願いいたします。

C#

1 public static string pdfEvent(int id, string place) 2 { 3 NpgsqlConnection conn = new NpgsqlConnection(conStr); 4 string sql = @"SELECT pdf_url FROM mobile.result_report WHERE task_id = @task_id;"; 5 NpgsqlCommand cmd = new NpgsqlCommand(sql, conn); 6 cmd.Parameters.AddWithValue("@task_id", id); 7 8 //string place; 9 using (conn) 10 { 11 conn.Open(); 12 place = (string)cmd.ExecuteScalar(); 13 } 14 return place; 15 }

Javascript

1 "PDF": function () { 2 3 var eventToUpdate = { 4 id: currentUpdateEvent.id, 5 }; 6 7 PageMethods.pdfEvent(eventToUpdate, pdfSuccess); 8 $(this).dialog("close"); 9 10 var filepath = pdfSuccess(place); 11 window.open(filepath); 12 13 $('#calendar').fullCalendar('pdfEvent', currentUpdateEvent); 14 15 }, 16

不慣れな質問で申し訳ございません。
下記情報を追記いたします。
ASP.net Web Formで作成をしています。
OS:Windows8.1
サーバーOS:Windowsserver2012R2
IIS:バージョン6.2(ビルド9200)

C#からJavascriptへ情報を渡した後は、windows.openで開くだけと思っていたので、文字列の受渡しだけと考えていましたが、もし違うなら、受け取った文字列の処理方法をご教授いただきたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/23 06:41

まず、何を作っているか(ASP.NET Web Forms? MVC? Web Pages? その他?)とあなたの開発環境(OS, IIS, .NET のバージョンなど)を書いてください。
退会済みユーザー

退会済みユーザー

2018/03/23 06:53

サーバー側で取得した文字列をクライアントスクリプトに渡す方法さえわかればいいのですか? その先、その文字列を Fullcalendar でなんちゃらするということは質問者さんの方で対応できるということでいいのですか?
guest

回答2

0

C#からJavascriptへ情報を渡した後は、windows.openで開くだけと思っていたので、文字列の受渡しだけと考えていましたが、もし違うなら、受け取った文字列の処理方法をご教授いただきたいです。

多分違う(というより、全くの見当違いでそんなことで望むことはできない)と思うのですが、受け取った文字列を Fullcalendar でなんちゃらして質問者さんが望むことができるような情報まで提供するのは自分には無理です。(Fullcalendar の勉強までしなけれなばらず、そこまでとてもやる気はしないので)

なので、サーバー側で取得する文字列をクライアントスクリプトに渡す案のみ 2, 3 回答します。それもどのようなタイミングで、どのように渡すか要件によっていろいろ変わってきます。最初からそこのところよく考えて、質問に含めていただけていたらと思います。

初期画面を描画する際に必要な情報がサーバーから取得できるのであれば、

(1) ClientScriptManager クラスを使って必要な情報をスクリプトとして登録する。

(2) 隠しフィールドに必要な情報を含めてクライアントに送信し、クライアント側ではそこから情報を取得する。

初期画面表示後ユーザーの操作などによって動的に情報を取得するのであれば、

(3) Web サービス、WCF などを Web Forms アプリに追加し、jQuery ajax 等を用いてそれにアクセスして情報を取得する。

その他、

(4) 可能であれば ASP.NET Web Forms アプリに標準で用意されている Calendar コントロールに変える。

質問者さんは、質問内容から想像するに、全くの初学者ではないですか? そうだとすると、今回の課題を解決するのはかなり難しいです。仕事でやっているなら、先輩・上司に相談することをお勧めします。

投稿2018/03/23 10:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wako.kasaoka

2018/03/26 07:43

ありがとうございます。 結局はevin101さんの回答を参考に同僚と一緒に考えました。 SurferOnWwwさんのご意見ももっともで、初心者が開発するような内容ではない気がしたのですが、人員不足から私が開発を行うこととなってしまいました。 やろうとしていることはなんとなくわかるのですが、実装となると非常に難しいですね。 今後も更なる勉強が必要と思いますので、壁にぶつかったときにはまた質問させてください。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/03/26 09:41 編集

> 結局はevin101さんの回答を参考に同僚と一緒に考えました。 Fullcalendar はどう関係するのでしょうか? 多分表示されたカレンダーの日付のボタンをクリックすると、ASP.NET AJAX に含まれる JavaScript のメソッドが起動されて Web サービスにアクセスし、DB から pdf 画像の url を得るということを考えておられると思いますが。 もしカレンダーを描画する際に各日付欄の中にハイパーリンク(a 要素)を設定できるのであれば、最初の描画時に当該 a 要素の href 属性に pdf 画像の url を設定するというようなことを考えた方がよさそうな気がします。ASP.NET AJAX も JavaScript も Web サービスも必要なくなります。 Fullcalendar はクライアント側のもののようですので、クライアント側でハイパーリンクの組み立てが必要になりますが、ASP.NET の Calendar コントロールを使えば、全てサーバー側のコードで設定できます。 せっかく ASP.NET Web Forms アプリを使っているのですから、Calendar 等のサーバーコントロールを最大限利用すべきだと思うのですが・・・
guest

0

ベストアンサー

PageMethodをJavaScriptで呼び出す場合、戻り値はコールバック関数の引数として受け取ることができます。

記載されたコードが中途半端なので適当に抜粋していますが、以下のような方法で呼び出すことができます。

C#

1[WebMethod] 2public static string pdfEvent(int id) 3{ 4 // 必要な処理 5 return url; 6}

JavaScript

1var PDF = function() { 2 PageMethods.pdfEvent(id, function(place){ 3 // C#側の戻り値がコールバックの引数に渡る 4 window.open(place); 5 }); 6}

注意点はC#側のメソッドはstaticでWebMethod属性が付与されていることと、aspxにはScriptManagerを配置して、EnablePageMethodsプロパティをtrueにしておくことでしょうか。

投稿2018/03/23 11:59

evin101

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wako.kasaoka

2018/03/26 07:39

ありがとうございます。 初めて仕事でのASP、C#、Javascriptでネット情報を参考に見よう見まねで試行錯誤しながら奮闘しています。 今回の件に関しましてもevin101さんの回答を参考に同僚に聞きながら作成を行いました。 これから更なる勉強が必要ですが、今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問