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

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

関連記事

Xamarin.Formsのプロジェクトを新規作成する手順

<目次> (1) Xamarin.Formsのプロジェクトを新規作成する手順  (1-1) Xamarin.Formsプロジェクトの作成   (1-1-1) プロジェクト新規作成   (1-1-2) …

BundleConfig.csの設定および記述方法について

  <目次> (1) BundleConfig.csの設定および記述方法について  (1-1) BundleConfig.csの設定および記述方法について  (1-2) BundleConf …

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

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

C#のabstract(抽象クラス)とは?継承やoverrideの手順や使い方をご紹介

<目次> (1) C#の抽象クラスやabstractとは?意味や使い方をご紹介  (1-1) 抽象クラスとは?  (1-2) 抽象クラスの使い方   (1-2-1) 抽象クラスの定義   (1-2-2 …

ASP.NET MVCでformをSubmitする方法

<目次> (1) ASP.NET MVCでformをSubmitする方法  (1-1) 概要  (1-2) HTMLを使ってformをsubmitする方法  (1-3) サンプルプログラム  (1-4 …

  • English (United States)
  • 日本語
Top