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

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

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

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

MVC

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

ASP.NET

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

Q&A

解決済

1回答

11810閲覧

Asp.Net MVC ViewからControllerへの値受け渡し

hiepita1

総合スコア37

C#

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

MVC

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

ASP.NET

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

0グッド

0クリップ

投稿2016/08/29 03:39

###前提・実現したいこと
ここに質問したいことを詳細に書いてください

初めてご質問させて頂きます。初心者ですので、基礎的な質問となってしまうかもしれませんが、お力を頂きたいです。

Controller1/Action1/id → Controller2/Action1/id → Controller3/Action1/id

(条件によって)→ Contoroller1/Action2/id → Controller2/Action1/id → Controller3/Action1/id

このように、アクション・コントローラーが異なる画面にドリルダウンをしていくWebサイトで、パンくずリストを動的に作成しようと試みています。
コントローラー側でパンくずリストの中身のURLのデータをList型で作り、各Viewでそれを展開するような実装をすることで、動作自体は期待した動きになったのですが、
このListのデータの受け渡しのより良い方法を探しています。
Listのデータの中身の例:List{Controller1/Action1/id,Controller2/Action1/id,Controller3/Action1/id}

①Sessionに入れる場合
Sessionに上記のデータを格納して、各Viewで展開する方法ですが、複数タブで開いた際に、パンくずリストが誤った表示になってしまいました。

②Sessionを使用しない場合
Sessionを使用せず、各ViewにはViewModelに格納して渡す方法です。
Listの中身のデータを、View→Controllerに返す際に、"Controller1/Action1/id,Controller2/Action1/id,Controller3/Action1/id"
などといった長いクエリ文字列をそのまま送ることになり、セキュリティ的にもクエリ文字列の文字制限的にもいろいろと問題があります。

私としては、セッションを使うのではなく、②の方向でなんとか実現したいです。
View→コントローラーにクエリ文字列を送る場合に、長い文字列を短くする方法などはありませんでしょうか?
また、ほかにもアイデアがあるようでしたらぜひご教示頂きたいです。よろしくお願いします。

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

※以下のような実装をしています。

Contoroller
{
List<string> Dataを作成
ViewModel.URL = Data
}

View
{
foreach(var item in model.URL)
{
//展開
}

//画面遷移
ActionLink("ドリルダウン"Contoroller,Action,new {string.Join(", ", model.URL.ToArry)})
}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Formの<input type="hidden">で毎回ポストしてはいかがでしょう?

C#

1//View側 2foreach(var item in model.URL) 3{ 4 <input name="foo" type="hidden" value="@item" /> 5} 6 7//Controller側 8public ActionResult Index(List<string> foo) 9{ 10 ViewModel.URL = Data 11 return View(ViewModel); 12}

投稿2016/08/30 07:50

nfkw1492

総合スコア25

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

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

ruby_math

2019/04/24 20:33

この実装だと、デベロッパーツールなど使われた際に予期せぬvalueを渡される可能性などは無いでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問