Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

ASP.NET C#

ASP.NETでViewに値を渡す方法

投稿日:

 

<目次>

(1) ASP.NETでViewに値を渡す方法
 (1-1) 方法1:アクションメソッドの引数に追加
 (1-2) 方法2:ViewBagを使う方法
 (1-3) 方法3:ビューデータディクショナリを使用(オススメ度:低)
 (1-4) サンプルプログラム

(1) ASP.NETでViewに値を渡す方法

(1-1) 方法1:アクションメソッドの引数に追加

Viewに渡したいオブジェクトを、アクションメソッドの引数として渡す方法です。

●構文

・Controller側
var textbook1 = new TextBook() { Name = "理科" };
return View(textbook1);
 
・View側
<!-- 方法1 -->
<h2>方法1:@Model.Name</h2>
 
(説明)
 
「textbook1」オブジェクトをそのままアクションメソッド(Viewメソッド)の引数として渡しているため、ViewBagやViewDataのようにプロパティの名前をメンテする必要がなく、一番オススメの方法になります。
 

(1-2) 方法2:ViewBagを使う方法

ViewBagはASP.NET MVCにおいて、モデル(Model)に含まれない「一時的なデータ」をController⇒Viewに連携する目的で使用します。
 

●構文

・Controller側
var textbook2 = new TextBook() { Name = "算数" };
// ランタイム(実行時)にViewBagに追加される
ViewBag.TextBook2 = textbook2;
 
・View側
<h2>方法2:@ViewBag.TextBook2.Name</h2>
 
(説明)
 
ViewBagは次の「方法3」で紹介する「ViewData」の後継機能として導入されました。dynamic型のプロパティであるため、コンパイル時ではなく、ラインタイム時に型のチェック等が行われます。こちらもプロパティの名前を変更しても他には自動反映されないため、手での置換等が必要となります。
 

(1-3) 方法3:ビューデータディクショナリを使用(オススメ度:低)

全てのControllerは「ViewData」と呼ばれるプロパティ(ViewDataDictionary型)を持っており、ここにデータを格納してViewに連携する事ができます。
 

●構文

・Controller側
var textbook3 = new TextBook() { Name = "社会" };
ViewData["TextBook"] = textbook3;
 
・View側
@using BookLibrarySystem.Models
<h2>方法3:@( ((TextBook)ViewData["TextBook"]).Name )</h2>
 
(説明)
ViewDataに格納されている要素はobject型のため、View側で取り出すために型を「TextBook型」にキャストをしています。
 

●備考

この方法は以下の理由から余り推奨されません。
 
・[“xxxx“]の中身を変更した際に、他の箇所も連動して変更されない
・View側でプロパティの値にアクセスするためにはキャストが必要なため
 

(1-4) サンプルプログラム

以上の3つの方法をまとめたサンプルプログラムをご紹介します。各部分がどの方法の記述か分かるように、プログラム中に「方法X」と記述しています。
 

●Controller

 
using BookLibrarySystem.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace BookLibrarySystem.Controllers
{
    public class HomeController : Controller
    {
        // GET: TextBooks/Trend
        public ActionResult Index()
        {

            //# 方法2:ViewBagを使用
            var textbook2 = new TextBook() { Name = "算数" };
            ViewBag.TextBook2 = textbook2;

            //# 方法3:ビューデータディクショナリを使用
            //# 各Dictionaryの中身はObjectである(Equals,ToStringなど)
            var textbook3 = new TextBook() { Name = "社会" };
            ViewData["TextBook3"] = textbook3;

            //# 方法1:アクションメソッドの引数に追加
            var textbook1 = new TextBook() { Name = "理科" };
            return View(textbook1);
        }
    }
}
 
(図141)
 

●View

 
@model BookLibrarySystem.Models.TextBook

<!-- 方法1 -->
<h2>方法1:@Model.Name</h2>

<!-- 方法2 -->
<h2>方法2:@ViewBag.TextBook2.Name</h2>

<!-- 方法3 -->
@using BookLibrarySystem.Models
<h2>方法3:@( ((TextBook)ViewData["TextBook3"]).Name )</h2>


@{
    ViewBag.Title = "Home Index";
}

<div class="jumbotron">
    <h3>本文</h3>
    <p class="lead">あああああああ</p>
</div>
 
(図142)
 
実行結果は次の(図143)のようになります。
 
(図143)
 

Adsense審査用広告コード


Adsense審査用広告コード


-ASP.NET, C#

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法+実際のソース例も掲載

<目次> (1) C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処法 (1 …

ASP.NETのMVCとは?入門者向けの概要説明やHelloWorld

<目次> (1) ASP.NETのMVCとは?入門者向けの概要説明やHelloWorld  (1-1) ASP.NET MVC5とは?  (1-2) MVCのアーキテクチャ概要  (1-3) ASP. …

ASP.NET MVC(C#)でHelloWorldする手順

<目次> (1) ASP.NET MVC(C#)でHelloWorldする手順  (1-1) プロジェクトの作成  (1-2) Controller(コントローラー)の作成  (1-3) Veiw(ビ …

ASP.NETの単体テストプロジェクトを新規に作成する方法

<目次> (1) ASP.NETの単体テストプロジェクトを新規に作成する方法  (1-1) ASP.NET MVCにおける単体テスト機能について  (1-2) ASP.NET MVCにおける単体テスト …

C#でNLogライブラリを用いてログ出力を行う方法

<目次> (1) C#でNLogライブラリを用いてログ出力を行う方法  (1-1) NLogの概要  (1-2) NLogの導入手順  (1-3) NLogの初期実装手順  (1-4) NLogのサン …

  • English (United States)
  • 日本語
Top