次の方法で共有


コントローラーからモデルのデータにアクセスする

投稿者: Scott Hanselman

これは、ASP.NET MVC の基本について紹介する、初心者向けチュートリアルです。 データベースから読み取りと書き込みを行う単純な Web アプリを作成します。 ASP.NET MVC の他のチュートリアルとサンプルについては、ASP.NET MVC ラーニング センターにアクセスしてください。

このセクションでは、新しい MoviesController クラスの作成、ムービー データを取得するいくつかのコードの記述、View テンプレートを使用したブラウザーへの表示を行います。

Controllers フォルダーを右クリックし、新しい MoviesController を作成します。

Add Controller

この操作を行うと、プロジェクト内の \Controllers フォルダーの下に新しい "MoviesController.cs" ファイルが作成されます。 MovieController を更新して、新しく設定されたデータベースからムービーの一覧を取得しましょう。

using System;
using System.Linq;
using System.Web.Mvc;
using Movies.Models;

namespace Movies.Controllers
{
    public class MoviesController : Controller
    {
        MoviesEntities db = new MoviesEntities();

        public ActionResult Index()
        {
            var movies = from m in db.Movies
                         where m.ReleaseDate > new DateTime(1984, 6, 1)
                         select m;

            return View(movies.ToList());

        }
    }
}

LINQ クエリを実行して、1984 年の夏以降にリリースされたムービーのみを取得します。 このムービーの一覧を表示するには View テンプレートが必要になるため、メソッドを右クリックし、[ビューの追加] を選択して作成します。

[ビューの追加] ダイアログ内では、List<Movies.Models.Movie> を View テンプレートに渡していることを示しています。 [ビューの追加] ダイアログを使用して "Empty" テンプレートを作成した前回とは異なり、今回は、既定のコンテンツを含む View テンプレートを Visual Studio で自動的に "スキャフォールディング" することを示しています。 これを行うには、[コンテンツの表示] ドロップダウン メニューで [リスト] 項目を選択します。

新しいクラスを作成したら、[ビューの追加] ダイアログに表示されるようにアプリケーションをコンパイルする必要があります。

Add View

[追加] をクリックすると、ムービーの一覧を表示する View のコードが自動的に生成されます。 これは、前に Hello World ビューで行ったように、<h2> 見出しを変更する良いタイミングです。

Movies - Microsoft Visual Web Developer 2010 Express

アプリケーションを実行し、アドレス バーの /Movies にアクセスします。 これで、コントローラー内の基本的なクエリを使用してデータベースからデータを取得し、ムービーを認識する View にそのデータを返しました。 その後、その View では、映画の一覧が表示され、データの表が作成されます。

Screenshot of the Internet Explorer browser window, which shows the My Movie List with Ghostbusters 2 and Ghostbusters 3 in the list.

このアプリケーションでは、編集、詳細、削除の機能を実装しません。そのため、スキャフォールディング テンプレートによって作成された既定のリンクは必要ありません。 /Movies/Index.aspx ファイルを開き、削除します。

これらの変更を行った後の更新された View テンプレートの表示のソース コードを次に示します。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Movies.Models.Movie>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Movie List
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>My Movie List</h2>
    <table>
        <tr>
            <th>Title</th>
            <th>ReleaseDate</th>
            <th>Genre</th>
            <th>Rating</th>
            <th>Price</th>
        </tr>
        <% foreach (var item in Model)
           { %>
        <tr>
            <td><%: item.Title %></td>
            <td><%: String.Format("{0:g}", item.ReleaseDate) %></td>
            <td><%: item.Genre %></td>
            <td><%: item.Rating %></td>
            <td><%: String.Format("{0:F}", item.Price) %></td>
        </tr>
        <% } %>
    </table>
    <p>
        <%: Html.ActionLink("Create New", "Create") %>
    </p>
</asp:Content>

不要なリンクが作成されているため、この例では削除します。 ただし、"新規作成" リンクは、次で使用するため残しておきます。 その列を削除した状態のアプリを次に示します。

Screenshot of the Internet Explorer browser window, which shows the My Movie List with the Edit, Details, and Delete links removed.

これで、ムービー データの簡単な一覧ができました。 ただし、"新規作成" リンクをクリックすると、接続されていないためエラーが発生します。 Create Action メソッドを実装し、ユーザーがデータベースに新しいムービーを入力できるようにしましょう。