ASP.Net MVC Web Applicationテンプレートの使い方

2009年9月10日

Visual StudioでASP.Net MVC Web Applicationプロジェクトを作成する。

Modelクラス、Repositoryクラスを作成する。RepositoryクラスはModelクラスの取得、保存の操作を実装するクラス。Modelクラスにはビジネスロジックだけを実装する。

Controlクラスを作成するにはControllerフォルダで右クリックし、追加->Controllerをクリックする。
Controllerクラスが作成されるので、例えば下記のようなリストデータ出力用メソッドを作成する。
下記サンプルコードはNerdDinnerサンプルより引用。

         // GET: /Dinners/            リスト出力
        //      /Dinners/Page/2     リスト出力(ページング有り)
        public ActionResult Index(int? page) {
            const int pageSize = 10;

            // RepositoryクラスにはModelクラスの取得、保存の操作を実装する。
           //ビジネスロジックはModelクラスに実装する。
            var upcomingDinners = dinnerRepository.FindUpcomingDinners();
            var paginatedDinners = new PaginatedList<Dinner>(upcomingDinners, page ?? 0, pageSize);

            //ActionResultはViewクラスが返却する。
            return View(paginatedDinners);
        }

 

Viewクラスの作成するには、このメソッド内で右クリックし、「Add View」をクリックするとViewフォルダ内にViewクラス(aspxファイル)が作成される。
aspxファイルはWebFormとは違い、下記のようなテンプレートファイル風なものになる。Htmlヘルパークラスなどを使用してViewを編集する。

<%@ Page Inherits=”System.Web.Mvc.ViewPage<NerdDinner.Helpers.PaginatedList<NerdDinner.Models.Dinner>>” Language=”C#” MasterPageFile=”~/Views/Shared/Site.Master” %>
<asp:Content ID=”Title” ContentPlaceHolderID=”TitleContent” runat=”server”>
 Upcoming Dinners
</asp:Content>
<asp:Content ID=”Content2″ ContentPlaceHolderID=”MainContent” runat=”server”>
    <h2>
        Upcoming Dinners
    </h2>
    <ul>
        <% foreach (var dinner in Model) { %>
            <li>    
                <%= Html.ActionLink(dinner.Title, “Details”, new { id=dinner.DinnerID }) %>
                on
                <%= Html.Encode(dinner.EventDate.ToShortDateString())%>
                @
                <%= Html.Encode(dinner.EventDate.ToShortTimeString())%>
            </li>       
        <% } %>
    </ul>

    <div class=”pagination”>
        <% if (Model.HasPreviousPage) { %>       
            <%= Html.RouteLink(“<<<”,
                               “UpcomingDinners”,
                               new { page=(Model.PageIndex-1) }) %>       
        <% } %>       
        <% if (Model.HasNextPage) { %>       
            <%= Html.RouteLink(“>>>”,
                               “UpcomingDinners”,
                               new { page = (Model.PageIndex + 1) })%>       
        <% } %>   
    </div>   
</asp:Content>

その他、下記のような詳細、CRUD操作などを行うメソッドを必要に応じて作成する。

      //
      // GET: /Dinners/Details/5
     public ActionResult Details(int id)

        //
        // GET: /Dinners/Edit/5
        [Authorize]
        public ActionResult Edit(int id)

        //
        // POST: /Dinners/Edit/5
        [AcceptVerbs(HttpVerbs.Post), Authorize]
        public ActionResult Edit(int id, FormCollection collection)

        //
        // GET: /Dinners/Create
        [Authorize]
        public ActionResult Create()

        //
        // HTTP GET: /Dinners/Delete/1
        [Authorize]
        public ActionResult Delete(int id)

コメントは受け付けていません。