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

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

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

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

MVC

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

Q&A

解決済

1回答

2677閲覧

C#で別のコントローラーを起こしたい

python_biginer

総合スコア14

C#

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

MVC

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

0グッド

0クリップ

投稿2023/01/29 02:36

前提

OSはwindows10です。
visual studio 2022 を使用しています。
使用している言語はC#やhtmlなどです。
フォルダの場所の関係は以下のようになっているとします。
┣ Menuフォルダ ━ MenuController.cs
┣ Subフォルダ ━ SubController.cs
┗ Addフォルダ ━ Rensyuフォルダ ━ RensyuController.cs

実現したいこと

asp.net mvc で、別のコントローラーを起こす処理を記述したいです。
RedirectToAction()を使用することで、MenuController.csからsubController.csを起こすことはできました。

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

しかし、MenuController.csからRensyuController.csを起こす方法が分かりませんでした。
同じ階層に無いからなのか、RedirectToActionの使い方が悪いのか原因を調べましたが、イマイチ原因が分かりませんでした。
改善するべき個所か、または別の方法でコントローラーを起こすべきであれば教えていただきたいです。

該当のソースコード

MenuController.csにて、

return RedirectToAction("Index", "Sub")
→ SubController.csのIndexメソッドを起こせる

return RedirectToAction("Index", "Rensyu")
→ 何も起こらない

試したこと

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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/01/29 02:44

ASP.NET のタグをつけてください。 .NET Framework なのか .NET Core / .NET のどっちなのかとそのバージョンを書いてください。 Visual Studio 2022 でプロジェクトを作成してと思いますが、その時使ったテンプレートが何かを書いてください。
退会済みユーザー

退会済みユーザー

2023/01/29 03:26

コントローラークラスは Controllers フォルダに配置するのが原則です。そうしない理由があるのですか? 理由があれば書いてください。 あなたの言う「別のコントローラーを起こす」とはどういう意味ですか? RedirectToAction はそれに不適切なような気がします。 「MenuController.csからRensyuController.csを起こす」ということから、Menu/Index にメニューバーのようなものが表示されていて、そのメニューの中の項目「Senryu」をクリックすると Senryu/Index が表示されるということではないかと想像してますが、違いますか?
python_biginer

2023/01/29 13:07

情報が不足してしまい申し訳ありません。より正確にはControllersフォルダの下にMenuフォルダ などが入っていて、更にその中にMenuControllerなどが入っている状態です。 Controllersフォルダ ┣ Menuフォルダ ━ MenuController.cs ┣ Subフォルダ ━ SubController.cs ┗ Addフォルダ ━ Rensyuフォルダ ━ RensyuController.cs 「別のコントローラーを起こす」については、自分の理解だとRedirectToAction は第2引数に入れた名前が付いているController.csの中の、第1引数に入れた名前のメソッドを起こすものだと思っていたのでそのように表現しました(例として、return RedirectToAction ("Index", "Menu")だったらMenuControllerのIndexメソッドを起こすといった感じです)。そもそもこの理解で合っているのかが分かりませんが、間違っていたら指摘をお願いします。 こちらが何がしたいのか伝わり辛かったようですが、私が行いたいのは単純に言えばMenuController.csにRensyuController.cs内のメソッドを起こす処理を加えたいといったことです。 .NET Framework か .NET Core / .NET かとそのバージョンについて、また使用したテンプレート名についてですが、申し訳ありませんが自分がそれらを調べる方法について十分に理解しておらず、調べることができていないため回答することができません。情報が不足しているとは思いますが、ご容赦ください。
退会済みユーザー

退会済みユーザー

2023/01/29 13:34

ASP.NET のタグをつけてください。 .NET Framework なのか .NET Core / .NET のどっちなのかとそのバージョンはソリューションエクスプローラーでプロジェクトを右クリックして出てくるメニューでプロパティを開くとターゲットフレームワーク(または対象フレームワーク)というのがあるのでそれを見れば分かります。 「MenuController.csからRensyuController.csを起こす」ということから、Menu/Index にメニューバーのようなものが表示されていて、そのメニューの中の項目「Senryu」をクリックすると Senryu/Index が表示されるということではないかと想像してますが、違いますか?・・・と聞きましたが答えてください。 話が通じないので、MenuController のコードを質問欄を編集して追記してください。それであなたのやりたいことが分るかも。
guest

回答1

0

ベストアンサー

より正確にはControllersフォルダの下にMenuフォルダ などが入っていて、更にその中にMenuControllerなどが入っている状態です。

Controllersフォルダ
┣ Menuフォルダ ━ MenuController.cs
┣ Subフォルダ ━ SubController.cs
┗ Addフォルダ ━ Rensyuフォルダ ━ RensyuController.cs

そうではなくて、Controllers フォルダ直下に直接コントローラーのクラスを置きましょう。以下のように。

イメージ説明

それで、return RedirectToAction("アクションメソッド名", "コントローラー名"); で目的のページにリダイレクトされるはずです。Controller と View がきちんとできていればの話ですが・・・

ただし、質問に対するコメントにも書きましたが、あなたの言う「別のコントローラーを起こす」には RedirectToAction は不適切な気がしますが。

投稿2023/01/30 00:35

編集2023/01/30 09:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問