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

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

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

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

ASP.NET

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

Q&A

解決済

1回答

4964閲覧

C# MVCでのAjaxについて

lirakiti

総合スコア12

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

ASP.NET

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

0グッド

0クリップ

投稿2019/05/12 12:27

前提・実現したいこと

こんにちは初投稿させて頂きます。
現在C# ASP.NET MVC で開発を進めています。
コントローラーに配列を渡そうとしているのですが以下エラーが発生し困っています。
つい最近まで動いていましたが、急に動かなくなってしまったので原因が絶対あるはずなのですがわからない状況にあります。
もしよろしければご教示頂けますと幸いです

発生している問題・エラーメッセージ

HTTP500: サーバー エラーです - サーバーで予期しない状態が発生したため、要求を完了できませんでした。
POST先:http://localhost:53850/HotelBase/EditProc

javaScript(JQeury)

1<script language="JavaScript"> 2 function editInfoProp() { 3 this.hotelName; 4 this.price; 5 this.name; 6 this.nameKana; 7 this.hotelDete; 8 this.hotelTime; 9 } 10 function editInfo(btnIndex) { 11 var editDelIndex = document.getElementById("editTable"); 12 alert(btnIndex); 13 //var row = editDelIndex.rows[btnIndex]; 14 //var row = this.parentNode.parentNode.rowIndex; 15 //alert(row); 16 var jsonEditData = new editInfoProp(); 17 18 //セルへの参照はrowのcellsプロパティ。 19 jsonEditData.hotelName = editDelIndex.rows[btnIndex].cells[1].innerHTML; 20 jsonEditData.price = editDelIndex.rows[btnIndex].cells[2].innerHTML; 21 jsonEditData.name = editDelIndex.rows[btnIndex].cells[3].innerHTML; 22 jsonEditData.nameKana = editDelIndex.rows[btnIndex].cells[4].innerHTML; 23 jsonEditData.hotelDete = editDelIndex.rows[btnIndex].cells[5].innerHTML; 24 jsonEditData.hotelTime = editDelIndex.rows[btnIndex].cells[6].innerHTML; 25 if (jsonEditData == null) { alert("取得できませんでした。もう一度試してください。"); return; } 26 27 var edit_data = JSON.stringify(jsonEditData); 28 29 $.ajax({ 30 type: "POST", 31 url: "../HotelBase/EditProc", 32 dataType: "JSON", 33 data: { editData: edit_data }, 34 async: true, 35 complete: function (data) { }, 36 error: function (XMLHttpRequest, textStatus, errorThrown) { 37 alert("XMLHttpRequest : " + XMLHttpRequest.status + "\n" 38 + "textStatus : " + textStatus + "\n" 39 + "errorThrown : " + errorThrown.message); 40 return; 41 }, 42 }); 43 44 } 45</script> 46

C#(呼び出し元)

1[HttpPost] 2[HttpGet] 3 public ActionResult EditForDelete() 4 { 5 //HTLReserve htlRsv = new HTLReserve(); 6 //htlReserveDataList htlReserveDataList = new htlReserveDataList(); 7 8 //htlRsv.GetReserve(); 9 var reservationList = _db.hTLReservations.ToList(); 10 11 return View("EditForDelete", reservationList); 12 }

C#(POST先)

1[HttpPost] 2 public ActionResult EditProc(string editData) 3 { 4 editDetails desirializeEditData = JsonConvert.DeserializeObject<editDetails>(editData); 5 ViewBag.hotelName = desirializeEditData.HotelName; 6 ViewBag.price = desirializeEditData.Price; 7 ViewBag.name = desirializeEditData.Name; 8 ViewBag.nameKana = desirializeEditData.NameKana; 9 ViewBag.hotelDate = desirializeEditData.HotelDate; 10 ViewBag.hotelTime = desirializeEditData.HotelTime; 11 12 return View("EditDetails"); 13 }

以上になります。
もし足りない情報・不備がございましたらお申しつけ下さい。
よろしくお願いいたします。

試したこと

①internal Server Error 500エラーなので
POST先に原因があると思いコントローラー側のコードを見ていたのですが、Entityで作成したDbContextで接続したDBのデータを
ToList()してきているので恐らく原因がそこではないかと考えています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
windows10
visual studio 2017
.Net Framework 4.6.1
ASP.NET MVC

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/05/13 01:54

> HTTP500: サーバー エラーです - サーバーで予期しない状態が発生したため、要求を完了できませんでした。 そのエラーはどのような操作を行った時に、どのタイミングで、どこに表示されるのですか? メッセージにもっと詳しい内容は含まれていませんか? できるだけ詳しく書いてください。 > Entityで作成したDbContextで接続したDBのデータをToList()してきているので恐らく原因がそこではないかと考えています。 それは EditForDelete アクションメソッドの中の var reservationList = _db.hTLReservations.ToList(); のことですね? そう判断した根拠は何ですか? タイトルに Ajax とあるとことから、jQuery ajax で url: "../HotelBase/EditProc" にPOST 要求をかけた時の話だと理解していますが、そうだとすると、そのコードは関係なさそうですけど。 > つい最近まで動いていましたが、急に動かなくなってしまったので原因が絶対あるはずなのですがわからない状況にあります。 心当たりはないのですか? 第三者に何が起こったか分かるはずはないので、質問者さんの方でよく思い出してもらう他ないのですが。 質門者さんはどういう立場なんでしょう。問題の ASP.NET MVC アプリの開発者で一からコードを書いていて全て知り尽くしている? それとも、他人が書いたコードの保守を任されていて、コードの内容は十分把握できていない?
x_x

2019/05/15 02:00

デバッグしてどこで例外が発生しているのか特定してください
lirakiti

2019/05/18 10:20 編集

SurferOnWww さん ご回答ありがとうございます。 >そのエラーはどのような操作を行った時に、どのタイミングで、どこに表示されるのですか? メッセージにもっと詳しい内容は含まれていませんか? できるだけ詳しく書いてください。 モデルの行数分生成したボタンを押下した際に発生しておりました。 表示箇所はデベロッパーツールの「コンソール」です。 エラーメッセージは質問内容のほかにないですね・・。 >それは EditForDelete アクションメソッドの中の var reservationList = _db.hTLReservations.ToList(); のことですね? そう判断した根拠は何ですか? .ToListで渡す(初期表示時)ではエラーが発生せず、ボタン押下後に確認できているので、渡し方は恐らく問題ないと思いました。憶測ではありますが・・。 >心当たりはないのですか? 第三者に何が起こったか分かるはずはないので、質問者さんの方でよく思い出してもらう他ないのですが。 仰る通りです。質問内容に記載するべきではなかったです。 申し訳ございませんでした。 >質門者さんはどういう立場なんでしょう。問題の ASP.NET MVC アプリの開発者で一からコードを書いていて全て知り尽くしている? それとも、他人が書いたコードの保守を任されていて、コードの内容は十分把握できていない? 記載するべき情報が抜けていたこと、大変失礼いたしました。 ASP.NET MVC は今年の3月頃から始め(C#自体は2年弱です)、自己学習のため1から勉強しながら進めている次第です。 なので、第三者は存在しないです。
lirakiti

2019/05/18 10:23

x_x さん ご回答ありがとうございます。 >デバッグしてどこで例外が発生しているのか特定してください エラー発生個所を記載しておらず申し訳ございません。 こちらデベロッパーツールの「コンソール」で表示されたエラーメッセージでした。 そして、ボタン処理はAjaxでPOST通信しているのでデバックでは追えない状況でした。
guest

回答1

0

自己解決

質問にご回答頂きました方々、非常に申し訳ございません。
こちら自己解決できましたため、記載致します。

というのも、JavaScriptの以下の部分
jsonEditData.hotelName = editDelIndex.rows[btnIndex].cells[1].innerHTML;
jsonEditData.price = editDelIndex.rows[btnIndex].cells[2].innerHTML;
jsonEditData.name = editDelIndex.rows[btnIndex].cells[3].innerHTML;
jsonEditData.nameKana = editDelIndex.rows[btnIndex].cells[4].innerHTML;
jsonEditData.hotelDete = editDelIndex.rows[btnIndex].cells[5].innerHTML;
jsonEditData.hotelTime = editDelIndex.rows[btnIndex].cells[6].innerHTML;
if (jsonEditData == null) { alert("取得できませんでした。もう一度試してください。"); return; }

こちらのcells[6]はfor文で生成したボタンを指定していました。
そのため、コントローラーの引数であるstring型に渡せなかった次第です。
また、ボタン生成した箇所は載せていなかったです。

ご迷惑おかけし、大変申し訳ございませんでした。
ご回答頂きました方々、誠にありがとうございます。

投稿2019/05/18 10:08

lirakiti

総合スコア12

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

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

退会済みユーザー

退会済みユーザー

2019/05/19 01:46

> ボタン処理はAjaxでPOST通信しているのでデバックでは追えない状況でした。 ・・・とのことですが、そんなことはないと思います。Visual Studio だけでなく Fiddler などのキャプチャツールも使うことを考えてください。 今回 500 エラーということなので、要求はアクションメソッドまでは届いて、要求を処理する段階で何らかの例外がスローされたと疑うのが妥当です。なので、 (1) まず Visual Studio で jQuery ajax から要求を出す先のアクションメソッドの中の一番最初の行あたりにブレークポイントをかけて、ボタンクリックでそこに制御が飛ぶか調べる。 (2) 制御が飛んできてそこでブレークされれば、アクションメソッドの引数に期待した通りの POST データがバインドされているか調べることから始めてステップ実行するなどでデバッグ可能。 (3) 制御が飛んでこないということであれば、POST データの内容が不正でモデルバインディングが正常にできてないことを疑って、そのあたりを調べる。それには、Fiddler を使って要求・応答をキャプチャし、ブラウザからの POST データが期待通り出ているか調べる。 (4) Fiddler を使ってキャプチャした応答の中身(ヘッダでなくコンテンツ)を見ると、たぶん詳細エラーメッセージが返ってきているはずなので、それをチェックする。 たぶん (2) までは調べて、ブレークポイントにかからないから Visual Studio のデバッグではお手上げになったのではないかと想像しています。もしそうであれば、Fiddler を使って (3) 以降のデバッグができます。 Web アプリの開発には Fiddler は必須と思います。ぜひ活用してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問