SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


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にアクセスした画面

次のページ
ASP.NET MVCのリクエストフロー

この記事は参考になりましたか?

ASP.NET MVCフレームワーク 正式版 入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4046 2010/08/29 06:32

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー