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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

MVC

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

ASP.NET

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

Q&A

解決済

1回答

19668閲覧

C#のmvcの使い方、コントローラからビューへの値の渡し方

nekoneko_

総合スコア9

C#

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

MVC

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

ASP.NET

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

0グッド

0クリップ

投稿2018/06/29 02:50

編集2018/06/29 05:33

現在C#で開発しています。
C#を使うのは初めてです。
LAMPでの開発経験はあり、フレームワークはcakephp、Zendの経験があります。
他はJavaScriptの経験もあります。

zendの場合などでは
コントローラで
$this->view->変数名=セットする値;
などでview側で変数、配列などなんでも使用することができるかと思います。

このような形でC#で使用できないのでしょうか
開発中のC#ではコントローラからmodelを呼び出し
consoleログでDB接続、select文で値を取得できるところまでは出来ております。
この取得した値をphpの
$this->view->変数名=セットする値;
のような形で
C#でもview側で配列を使用したいと考えております。

C#では初歩のViewDataを文字列を代入して使用する、
@Html.Action(アクション名)などでcshtmlを連結する
までは理解しています。
また、phpとC#での違いの
voidはreturnできない、関数の定義として戻り値の型を定義するところまでは理解しております。

コントローラから配列、変数の場合、どのように渡すのか
またview側でそれをどのように受け取りどのように使用するのか不明です。

phpなどといった簡単な高級言語しかやったことない開発にわかですが、ご教授いただけたら幸いです。
環境はvs2017、mvc5、C#7.0、SqlServer2008です。
よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/06/29 03:21

ASP.NET MVC の話のようですが、そうであれば ASP.NET のタグもつけてください。
takezoux2

2018/06/29 03:51

voidはreturn出来ないとはどういうことでしょうか?C#でvoidが戻り値の関数でもreturnは出来ます。関数に定義した戻り値の型しかreturn出来ないということですかね?
nekoneko_

2018/06/29 04:11

takezoux2 様>おっしゃるとおりです。言葉足らずで申し訳ありません。
退会済みユーザー

退会済みユーザー

2018/06/29 04:45

ASP.NET のタグ付けのお願いは無視ですか?
nekoneko_

2018/06/29 05:04

SurferOnWww 様>先ほど更新したと思ったのですが。。。画面の左下編集から編集して、右下の更新を押しても追加できませんでした。再度調べてみます。
退会済みユーザー

退会済みユーザー

2018/06/29 05:06

了解しました。お待ちします。
退会済みユーザー

退会済みユーザー

2018/06/29 05:08

void は return できないというのは、Controller のアクションメソッドのことを言っていると思いますが、それは正しいです。アクションメソッドでは、アクションの結果をフレームワークに伝えるために、戻り値として ActionResult 派生オブジェクトを返す必要があります。
退会済みユーザー

退会済みユーザー

2018/06/29 05:55 編集

対応をありがとうございました。参考にされている記事はかなり古く、Razor 構文が出てくる前のもののようですのでご注意ください。こちらの方がよさそうです。 http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/index/index.html
nekoneko_

2018/07/01 23:32

SurferOnWww 様 >ありがとうございます。こちら参考にさせていただきます。また何かございましたら、よろしくお願いいたします。
guest

回答1

0

ベストアンサー

コントローラから配列、変数の場合、どのように渡すのか
またview側でそれをどのように受け取りどのように使用するのか不明です。

モデル(特定のビューに合わせて作成された、厳密に型指定されたオブジェクト)を使うのが普通です。

一例(あくまで例です)を書きますと以下の通りです。

まず、以下のような class をモデルとして定義します。これを使って View にデータを渡すことを考えます。

public class CustomerName { public string Title { get; set; } public string FirstName { get; set; } public string MiddleName { get; set; } public string LastName { get; set; } }

Controller のアクションメソッドで、3 人分の CustomerName オブジェクトを作成し、そのコレクション(List<CustomerName> オブジェクト)を View に渡すことにします。コードは以下の通りです。(実際は、SQL Server などの DB から Linq to Entities を利用してデータを取得して設定するケースが多いのですが、それを書くと混乱しそうなので簡略化しました)

public ActionResult CustomerName() { ViewBag.Message = "ViewBag 経由で取得した情報"; List<CustomerName> model = new List<CustomerName> { new CustomerName { Title = "Mr.", FirstName = "Orlando", LastName = "Gee" }, new CustomerName { Title = "Mr.", FirstName = "Keith", LastName = "Harris" }, new CustomerName { Title = "Ms.", FirstName = "Donna", LastName = "Carreras" } }; return View(model); }

アクションメソッドから渡されたモデルを View で使用するには、以下のコードのように @model として型を宣言する必要があります。3 人分の CustomerName オブジェクトのコレクションなので IEnumerable<CustomerName> 型として宣言してます。Mvc5App.Models は名前空間名です。

@model IEnumerable<Mvc5App.Models.CustomerName> @{ ViewBag.Title = "CustomerName"; } <h2>CustomerName</h2> <p>@ViewBag.Message</p> <table class="table"> <tr> <th> @Html.DisplayNameFor(model => model.Title) </th> <th> @Html.DisplayNameFor(model => model.FirstName) </th> <th> @Html.DisplayNameFor(model => model.LastName) </th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.FirstName) </td> <td> @Html.DisplayFor(modelItem => item.LastName) </td> </tr> } </table>

上のコードで Model には IEnumerable<CustomerName> オブジェクトが渡されます。

また、DisplayNameFor のラムダ式の引数には CustomrerName オブジェクトが、DisplayFor のラムダ式引数には IEnumerable<CustomerName> オブジェクトが渡されます。

モデルの他に、ViewData や ViewBag のようなディクショナリを使ってアクションメソッドから View にデータを渡すこともできます。上のコードには ViewBag を使って例を書きました。

投稿2018/06/29 07:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nekoneko_

2018/07/01 23:46

細かくご説明いただき、ありがとうございます。 List型でviewに渡すことも出来るのですね。それすら知らなかったです。。。 ご教示いただいたソースを実際に使用してみて、基礎を固めてから行いたいと思います。 今後ともよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/07/02 00:19

List 型に限らず、C# のオブジェクトなら何でも渡せます。ただし、何でも可と言っても、そうすることが良いかどうかは話が別です。上にも書きましたが「特定のビューに合わせて作成された、厳密に型指定されたオブジェクト」にするのか、View から Action Method に渡すケースを考えると、セキュリティの面などでもよさそうです。
nekoneko_

2018/07/05 01:00

ありがとうございます。とても勉強になります! 現在行いたいのは、とても単純なもので 検索ボックス、プルダウンなどで同じページ(action)へpostして検索したら帳票を出すといったものです。 phpだとさくっとできるのですが、C#では行き詰ってしょうがないです。。。 http://kitigai.hatenablog.com/entry/2017/12/18/201513 上記などは、なんでも渡せるといったところの参考サイトになりますかね。。。 SurferOnWww 様の仰る通りでフローや行いたい内容を考えた上で記述していきたいと思っております。
退会済みユーザー

退会済みユーザー

2018/07/05 03:04

> http://kitigai.hatenablog.com/entry/2017/12/18/201513 > 上記などは、なんでも渡せるといったところの参考サイトになりますかね。。。 個人的意見を言わせていただければ、参考にならないので(逆にミスリードされそうなので)、読まない方が良いと思います。 ネットの情報は玉石混交です。玉も多いですが、石もあります(場合によっては毒も)。なので、それを見極めるだけのスキル・知識が必要です。質問者さんには、本を買って体系的に勉強することをお勧めします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問