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

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

関連記事

ASP.NETのViewBagとは?構文やサンプルプログラムもご紹介

  <目次> (1) ASP.NETのViewBagとは?構文やサンプルプログラムもご紹介  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム (1) ASP.NETの …

C#でファイルを1行ずつ読み込み処理を行うサンプルプログラム

<目次> (1) C#でファイルを読み込み処理を行うサンプルプログラム  (1-1) 構文  (1-2) サンプルプログラム  (1-3) サンプルプログラムの補足 (1) C#でファイルを読み込み処 …

C#で型をStringからintに変更する方法~TryParseメソッドによる型変換~

<目次> (1) C#で型をStringからintに変更する方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) プログラム補足「'{0}’や'{1}’」に …

C#で見るgetやsetとは?プロパティの基礎についてご紹介

<目次> (1) C#で見るgetやsetとは?プロパティの基礎についてご紹介  (1-1) プロパティとは?  (1-2) プロパティの構文  (1-3) サンプルプログラム  (1-4) プロパテ …

BundleConfig.csが読み込まれない場合の確認ポイントについて(ASP.NET)

  <目次> (1) BundleConfig.csが読み込まれない場合の確認ポイントについて(ASP.NET)  (1-1) 前提条件  (1-2) 確認ポイント   (確認①)Bundl …

  • English (United States)
  • 日本語
Top