CodeZine(コードジン)

特集ページ一覧

ASP.NET MVCで簡単なアプリケーションを構築しよう

ASP.NET MVCフレームワーク 正式版 入門(2)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/07/07 14:00
目次

Controllerクラスに処理を追加する

 続いてControllerクラスにLINQを利用して、Index/Details/Edit/Create各アクションメソッドの内容を記述します。

Indexアクションメソッド

 Indexアクションメソッドでは、テーブルのデータを一覧表示する記述をします。LINQ部分・ViewDataの扱いなどに特筆すべき点はありません。ポイントは、Viewメソッドの部分です。

PubsController.cs の一部
using System.Linq;
using System.Web.Mvc;
using SampleMvcApplicationCS.Models;

namespace SampleMvcApplicationCS.Controllers
{
    public class PubsController : Controller
    {
        pubsEntities pubs = new pubsEntities();

        <中略>

        //
        // GET: /Pubs/Index


        public ActionResult Index()
        {
            // titlesテーブルのレコードを全取得
            var titles = from t in pubs.titles
                         select t;
            // Index.aspxページにLINQ結果のModelを渡す
            return View(titles);
        }

        <中略>

    }
}

 前回解説しましたが、ViewメソッドはパラメタにModelを格納できます。今回はテーブルレコードを全取得し、その結果をIndex.aspxへ渡しています。URLルーティング結果は/Pubs/Indexです(図11)。

図11 /Pubs/Indexにアクセスした画面(一覧表示ページ)
図11 /Pubs/Indexにアクセスした画面(一覧表示ページ)

Detailsアクションメソッド

 Detailsアクションメソッドでは、テーブルデータから1レコード選択し、そのデータの詳細を表示させます。

PubsController.cs の一部
using System.Linq;
using System.Web.Mvc;
using SampleMvcApplicationCS.Models;

namespace SampleMvcApplicationCS.Controllers
{
    public class PubsController : Controller
    {
        pubsEntities pubs = new pubsEntities();

        <中略>

        //
        // GET: /Pubs/Details/5

        public ActionResult Details(string id)
        {
            // titlesテーブルのレコードを全取得
            var titles = (from t in pubs.titles
                          where t.title_id == id
                          select t).First();
            // Details.aspxページにLINQ結果のModelを渡す
            return View(titles);
        }

        <中略>

    }
}

 最初にパラメタ部分を変更します。今回はtitle_idがView側からパラメタとして渡されますが、その値がstring型なので、既定のint型からstring型へ変更します。

 LINQ部分では、パラメタとして渡されたidを利用して該当レコードを絞り込んでいます。また、Firstメソッドを利用して要素を取得し、その値をDetails.aspxへと渡しています。URLルーティング結果は/Pubs/Details/id(そのidによって異なる)です(図12)。

図12 /Pubs/Details/BU1032にアクセスした画面(詳細表示ページ)
図12 /Pubs/Details/BU1032にアクセスした画面(詳細表示ページ)

Editアクションメソッド

 Editアクションメソッドでは、初回アクセス時にテーブルデータから1レコード選択し、そのデータの詳細を表示させます。続いて、各項目の編集結果をModelに更新し、その後テーブルへと更新結果を反映させます。

PubsController.cs の一部
using System.Linq;
using System.Web.Mvc;
using SampleMvcApplicationCS.Models;

namespace SampleMvcApplicationCS.Controllers
{
    public class PubsController : Controller
    {
        pubsEntities pubs = new pubsEntities();

        <中略>

        // 【1】初回アクセス時
        // GET: /Pubs/Edit/5
 
        public ActionResult Edit(string id)
        {
            // titlesテーブルのレコードを全取得
            var titles = (from t in pubs.titles
                         where t.title_id == id
                         select t).First();
            // Edit.aspxページにLINQ結果のModelを渡す
            return View(titles);
        }

        // 【2】編集更新ボタンクリック時
        // POST: /Pubs/Edit/5

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(string id, FormCollection collection)
        {
            // パラメタのtitle_idと一致するレコードを取得
            var titles = (from t in pubs.titles
                          where t.title_id == id
                          select t).First();

            try
            {
                // 主キーとなるtitle_id以外の項目の更新があればそれを更新する
                UpdateModel(titles);
                // 更新を反映させる
                pubs.SaveChanges();

                // Index.aspxページにリダイレクト
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        <中略>

    }
}
【1】初回アクセス時

 Editページへの初回アクセス時、変更対象となるレコードを表示するために、パラメタを利用してLINQで該当レコードを抽出し、その結果をEdit.aspxへ渡しています。URLルーティング結果は/Pubs/Edit/id(そのidによって異なる)です(図13)。

図13 /Pubs/Edit/BU1032にアクセスした画面(編集ページ)
図13 /Pubs/Edit/BU1032にアクセスした画面(編集ページ)
【2】編集更新ボタンクリック時

 再度変更対象となるレコードを抽出後、UpdateModelメソッドを使い、主キー以外の項目(今回のサンプルではViewPage側で主キーをHtml.Encodeメソッドを使い更新対象外としています。)で変更があれば、それを更新します。また、Entity Frameworkを活用しているので、EDMからDBへの更新を反映させるSaveChangesメソッドを使い、DBへのレコード更新も行っています。その後、RedirectToActionメソッドにより、Index.aspxページにリダイレクトしています(図14)。

図14 編集後、/Pubs/Indexにアクセスした画面
図14 編集後、/Pubs/Indexにアクセスした画面

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:ASP.NET MVCフレームワーク 正式版 入門

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト ナオキ(ナオキ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5