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

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

ただいまの
回答率

90.52%

  • C#

    7111questions

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

  • ASP.NET

    528questions

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

  • MVC

    224questions

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

  • Model

    82questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 480

nekoneko_

score 1

現在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です。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • nekoneko_

    2018/06/29 14:47

    SurferOnWww 様 >タグが更新できなかったのは、編集した後に左下の要約を記入するのを忘れていたのが原因でした。。。ありがとうございます。派生オブジェクトというのをしっかりと認識できておりませんでした。。。http://www.atmarkit.co.jp/ait/articles/0907/10/news109.htmlのページをよく読んで、勉強するようにします。ありがとうございました!

    キャンセル

  • SurferOnWww

    2018/06/29 14:55 編集

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

    キャンセル

  • nekoneko_

    2018/07/02 08:32

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

    キャンセル

回答 1

checkベストアンサー

+3

コントローラから配列、変数の場合、どのように渡すのか
また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/07/02 08:46

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

    キャンセル

  • 2018/07/02 09:19

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

    キャンセル

  • 2018/07/05 10:00

    ありがとうございます。とても勉強になります!
    現在行いたいのは、とても単純なもので
    検索ボックス、プルダウンなどで同じページ(action)へpostして検索したら帳票を出すといったものです。
    phpだとさくっとできるのですが、C#では行き詰ってしょうがないです。。。

    http://kitigai.hatenablog.com/entry/2017/12/18/201513
    上記などは、なんでも渡せるといったところの参考サイトになりますかね。。。
    SurferOnWww 様の仰る通りでフローや行いたい内容を考えた上で記述していきたいと思っております。

    キャンセル

  • 2018/07/05 12:04

    > http://kitigai.hatenablog.com/entry/2017/12/18/201513
    > 上記などは、なんでも渡せるといったところの参考サイトになりますかね。。。

    個人的意見を言わせていただければ、参考にならないので(逆にミスリードされそうなので)、読まない方が良いと思います。

    ネットの情報は玉石混交です。玉も多いですが、石もあります(場合によっては毒も)。なので、それを見極めるだけのスキル・知識が必要です。質問者さんには、本を買って体系的に勉強することをお勧めします。

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    7111questions

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

  • ASP.NET

    528questions

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

  • MVC

    224questions

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

  • Model

    82questions

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