質問: ### 前提・実現したいこと ASP.NETのMVCで開発を行っています。 1.View/Home/Index.cshtmlのボタンクリック ※ここでJavaScriptオブジェクトを作成 ↓ ○ 2.Controller/Homecontoroller.cs ※1.のオブジェクトは取得できてます。 ↓ × 3.Controller/Testcontroller.cs ↓ 4.View/Test/Test.cshtmlを表示 上記のような流れで作成したいのですが、うまくできません。 現状は、2.Controller/Homecontoroller.csまで呼び出せているのですが、 RedirectToActionか、RedirectToRouteを使用したいと思うのですが、 ネットで検索してもわからず、どの様に記述すれば良いか分からず質問させて頂きました。 ご教授お願い致しますm(_ _)m
回答: > > 上記のような流れで作成したいのですが、うまくできません。 > > > うまくできませんだけでは何がどううまくいかないのか分かりません。 質問者さんが○○〇を期待して、△△△を試したが、結果は×××となってしまって、期待したこととは□□□が異なる・・・というような情報を提供できないですか? ・・・と注文を付けるばかりでは何ですので、想像を膨らませてみましたが、以下のようなことですか? 1 で作成して 2 に渡した「JavaScriptオブジェクト」を 3 に渡したいが、3 で取得することができない。 そういう場合は、ASP.NET では Session を使います。MVC にはそのスマートラッパーとして TempData ディクショナリというのがありますので、それを使う方が少し効率的です。 詳しくは以下の記事の「アクション メソッド間での状態の受け渡し」のセクションを見てください。 ASP.NET MVC アプリケーションでのデータの受け渡し https://msdn.microsoft.com/ja-jp/library/dd394711(v=vs.100).aspx 私の想像がハズレの場合は、質問者さんが○○〇を期待して、△△△を試したが、結果は×××となってしまって、期待したこととは□□□が異なる・・・というような情報を提供してください。 *********** 追記 *********** 2017/03/03 18:32 の私のコメントで「詳しいことは後で回答欄に追記します」と書きましたが、それを以下に書きます。 質問者さんはチュートリアルなどを参考に CRUD 操作ができるサンプルを作ったことがありますか? もしなければ、たとえば、以下のチュートリアルに従って作ってみてください。DB First で EDM を作って、それをベースに Visual Studio のスキャフォールディング機能を使うと、自分では一行もコードを書かなくても、CRUD 操作に必要な Controller と View のソースコードが一式自動生成されます。 10 行でズバリ!! ASP.NET MVC を構成する各コンポーネントとネーミング ルール (C#) https://code.msdn.microsoft.com/10-ASPNET-MVC-C-8566eeb5/ 例えば、Controller は以下のようになります(一部のみアップしています)。それに対応する View のコードも自動生成されます。 ``` using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using AdventureWorksLT; namespace Mvc4App.Controllers { public class Address2Controller : Controller { private AdventureWorksLT_DataEntities db = new AdventureWorksLT_DataEntities(); // ・・・中略・・・ // // GET: /Address2/Create public ActionResult Create() { return View(); } // // POST: /Address2/Create [HttpPost] public ActionResult Create(Address address) { if (ModelState.IsValid) { db.Address.AddObject(address); db.SaveChanges(); return RedirectToAction("Index"); } return View(address); } } } ``` これが基本です。 たぶん、質問者さんは、上の例で言うと return RedirectToAction("Index"); のところで無理やり(?)「JavaScriptオブジェクト」を渡そうとしておかしな結果になっているのではないかと思います。 「JavaScriptオブジェクト」は上の回答で書いたように TempData を使って渡してください。基本を守ればうまくいくはずです。