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

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

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

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

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

Q&A

1回答

4858閲覧

ASP.NET(C#)からJavascriptへ配列を渡してJavascriptを実行したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

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

0グッド

0クリップ

投稿2017/12/07 07:42

ASP.NET(C#)からJavascriptへ配列を渡してJavascriptを実行したい。

サーバー側でデータ取得及び配列(ListArray型:多次元配列)にするまでは終了しました。
その後どうしたらいいか、さっぱりわかりません。。。
どなたかご教授お願い致します。

開発環境:VisualStudio2017
DB:Oracle

JavaScript

1///* =================================================== 2// * カレンダー生成 3// * ===================================================*/ 4function setCalendar(progressList) { 5 6 var yy, mm, column; 7 // yy,mmが未定義なら(つまり一番最初にページを開いたときに)そのときの年月を変数yy,mmに付与する 8 if (!yy && !mm) { 9 var yy = new Date().getFullYear(); 10 var mm = new Date().getMonth(); 11 mm = mm - (-1); // mmは前月を指してしまうのでプラス1してあげる(-(-1)はJavaScriptが足し算苦手なため) 12 } 13 var zdate = new Date(yy, mm - 1, 0); // 前月末 14 var tdate = new Date(yy, mm, 0); // 当月末 15 zedd = zdate.getDate(); // 前月末日 16 zedy = zdate.getDay(); // 前月末曜日 17 tedd = tdate.getDate(); // 当月末日 18 tedy = tdate.getDay(); // 当月末曜日 19 20 // カレンダーに埋める数字を配列daysに格納する(5行で済めば35要素、6行なら42要素) 21 var days = []; 22 23 // 前月末が土曜日以外(日曜日から0,1,2・・・土曜日が6) 24 if (zedy != 6) { 25 // 前月最終日曜日から月末曜日までの日付(for逆回しに注意) 26 for (var i = zedy; i >= 0; i--) { 27 days[zedy - i] = (zedd - i); 28 } 29 // 当月日付 30 for (var i = 1; i <= tedd; i++) { 31 days[zedy + i] = i; 32 } 33 // 当月末が35番目までに終了 34 if ((zedy + tedd) <= 34) { 35 // 翌月日付 36 for (var i = 1; i < 35 - zedy - tedd; i++) { 37 days[zedy + tedd + i] = i; 38 } 39 // 当月末が35番目を超えて終了 40 } else if ((zedy + tedd) > 34) { 41 // 翌月日付 42 for (var i = 1; i < 42 - zedy - tedd; i++) { 43 days[zedy + tedd + i] = i; 44 } 45 } 46 47 // 前月末が土曜日(何月であろうと5行で足りる) 48 } else if (zedy == 6) { 49 // 当月日付 50 for (var i = 1; i <= tedd; i++) { 51 days[i - 1] = i; 52 } 53 // 翌月日付 54 for (var i = 0; i < 35 - tedd; i++) { 55 days[tedd + i] = i + 1; 56 } 57 } 58 59 // DOM生成(いよいよ描画) 60 var out = "<table class='clsaln'>"; 61 62 out += "<caption>"; 63 out += "<div class='clsCalenderMonth'>" 64 // 今月へ戻るリンク 65 //out += "<a href='#' onclick='setCalendar();return false;'>今月 </a>"; 66 // 前月へ移動リンク 67 out += "<a href='#' yy='" + yy + "' mm='" + mm + "' onclick='backmm(this);return false;'>\< </a>"; 68 out += yy + '年' + mm + '月'; 69 // 翌月へ移動リンク 70 out += "<a href='#' yy='" + yy + "' mm='" + mm + "' onclick='nextmm(this);return false;'>\></a>"; 71 out += "</div>" 72 out += "</caption>"; 73 74 var youbi = ["日", "月", "火", "水", "木", "金", "土"]; 75 out += "<tr class='clsalnHeader'>"; 76 for (var i in youbi) { 77 out += "<td>" + youbi[i] + "</td>"; 78 } 79 80 // ここからさきほど作った配列daysの中身を展開していく 81 82 // columnセット 83 var column = ""; 84 85 // 行数を計算する 86 var row = days.length / 7; 87 // 行数分だけ回す 88 for (var i = 1; i <= row; i++) { 89 out += "<tr class='clsalnBody'>"; 90 // うまく説明できないが行の変動に対応できるように何とかして回す 91 for (var j = 7 * i - 6; j <= 7 * i; j++) { 92 // あとでいろいろいじれるように属性やイベントを混ぜておく 93 out += "<td class='clsTdLink' row='" + i + "' yy='" + yy + "' mm='" + mm + "' dd='" + days[j - 1] + "' onclick='show(this);return false;'>" + "<div class='clsDay'>" + days[j - 1] + "</div>" + "<div class='clsSetHosu'>" + column + "</div>" + "</td>"; 94 } 95 out += "</tr>"; 96 } 97 out += "</table>"; 98 99 // 最後にhtmlへどかっと渡す 100 document.getElementById("idResultMap").innerHTML = out; 101 //document.getElementById("idResultStep").innerHTML = out; 102 //document.getElementById("idResultWeight").innerHTML = out; 103 //document.getElementById("idResultWaist").innerHTML = out; 104} 105 106// 前月へ移動(年度をまたぐときはyyを調整する必要がある点に留意) 107function backmm(e) { 108 var yy = e.getAttribute('yy'); 109 var mm = e.getAttribute('mm'); 110 if (mm != 1) { 111 mm = mm - 1; 112 } else if (mm == 1) { 113 mm = 12; 114 yy = yy - 1; 115 } 116 setCalendar(yy, mm); 117} 118 119// 翌月へ移動 120function nextmm(e) { 121 var yy = e.getAttribute('yy'); 122 var mm = e.getAttribute('mm'); 123 if (mm != 12) { 124 mm = parseInt(mm) + 1; // mm-(-1)でも同じだがparseIntを使ってみた 125 } else if (mm == 12) { 126 mm = 1; 127 yy = parseInt(yy) + 1; 128 } 129 setCalendar(yy, mm); 130} 131 132// 日付をクリックしたときに日付をアラートさせる(年と月の拾い方、年またぎに注意) 133function show(e) { 134 var row = e.getAttribute('row'); 135 var yy = e.getAttribute('yy'); 136 var mm = e.getAttribute('mm'); 137 var dd = e.getAttribute('dd'); 138 // クリック対象が1行目かつ前月の日付 139 if (row == 1 && dd > 7) { 140 if (mm != 1) { 141 mm = mm - 1; 142 } else if (mm == 1) { 143 yy = yy - 1; 144 mm = 12; 145 } 146 } 147 // クリック対象が最終行かつ翌月の日付 148 if ((row == 5 || row == 6) && dd < 7) { 149 if (mm != 12) { 150 mm = parseInt(mm) + 1; 151 } else if (mm == 12) { 152 yy = parseInt(yy) + 1; 153 mm = 1; 154 } 155 } 156 disp(); 157}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/12/07 08:00 編集

ASP.NET と言っても Web Forms, MVC, Web Pages, Web API などいろいろありますが何ですか? それから、自分の開発環境(OS, IIS, .NET のバージョン、ブラウザは何かなど)を書いてください。質問するときのイロハのイです。
退会済みユーザー

退会済みユーザー

2017/12/07 07:59

そして、質問内容ですが、長くて意味が分からない JavaScript のコードをベタっと貼ってそれを読めというのでは回答者の負担が重すぎです。サーバー側からのデータの渡し方が分からないということのようですが、具体的にサーバー側のどのようなデータをどのタイミングでスクリプトのどこに渡せばいいか、文章で書いて説明していただけませんか。
退会済みユーザー

退会済みユーザー

2017/12/07 08:25

大変失礼致しました。ご指摘ありがとうございます。 > ASP.NET と言っても Web Forms, MVC, Web Pages, Web API ⇒WebPagesです。 >OS, IIS, .NET のバージョン、ブラウザは何かなど ⇒Windows、IIS7、 .NET4系 >サーバー側のどのようなデータをどのタイミングでスクリプトのどこに渡せばいいか ⇒DBから取得したString型の配列をPage_Load時(C#側)に  JavaScriptの引数に渡したいです。    「function setCalendar(progressList) {} 」    "progressList"の部分になります。
退会済みユーザー

退会済みユーザー

2017/12/07 09:48

> WebPagesです ← それは確かですか? WebPages と言うのはこれ→ https://msdn.microsoft.com/ja-jp/library/hh396384(v=vs.111).aspx ですけど間違いないですか? Page_Load とかが出てくるということは Web Forms のような気がするのですが・・・
guest

回答1

0

C#で生成した配列をJSに渡したいと言って、JSをゴリッと張られてもよく分かりません。
普通にやるんであれば以下の手順では?

  • 生成した配列データをNewtonsoft等を使ってJSONシリアライズ
  • シリアライズしたデータをHTML側のinput hiddenに詰める
  • 詰めたデータをJS側で読み込んでjson.parse
  • 後は煮るなり焼くなりなんなりと

※Page_LoadとあるのでASP.NETを想定
※jQueryなしでもいいですが有ったほうがやりやすいかな

投稿2017/12/08 01:01

編集2017/12/08 01:03
ShikaTech

総合スコア468

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

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

退会済みユーザー

退会済みユーザー

2017/12/08 02:52

質問者さんによると、 > DBから取得したString型の配列をPage_Load時(C#側)に  JavaScriptの引数に渡したいです とのことですので、シリアライズ / デシリアライズとかの面倒なことはしなくてもよさそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問