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) …

C#のintに?「はてな」(question mark)が付いている意味について

<目次> (1) C#のintに?「はてな」(question mark)が付いている意味について  (1-1) 「int?」とは?  (1-2) 「int?」の型について  (1-3) 「int?」 …

C#で配列に特定の値があるか?をチェックする方法を2つご紹介~ContainsとLINQ~

<目次> (1) C#で配列に特定の値があるか?をチェックする方法  (1-1) 方法①:ListクラスのContainsメソッドを使う方法   (1-1-1) 構文   (1-1-2) サンプルプロ …

Xamarin.Formsで画面遷移を実装する手順について+ソースコードも紹介

<目次> (1) Xamarin.Formsで画面遷移を実装する手順について  (1-1) 遷移先ページの追加  (1-2) 画面遷移ロジック追加   (1-2-1) ボタンコントロールの追加   ( …

no image

C#でコンソールにパスワード入力する際のマスキング処理の実装例のご紹介

  <目次> (1) C#でコンソールにパスワード入力する際のマスキング処理の実装例のご紹介  (1-1) 構文  (1-2) サンプルプログラム (1) C#でコンソールにパスワード入力す …

  • English (United States)
  • 日本語
Top