2012/09/25

【Asp.Net】MVC4で何か作ってみる その5【MVC】

 前回の続きです。

 前回は追加・更新・削除とメインとなる機能を作成しました。今回からは見た目の部分をやっていこうかと思います。まずは今後jqueryやcssを使うにあたってレイアウトページがあった方が定義をまとめたりしやすそうなのでレイアウトページを作成します。

 プロジェクトにレイアウトページを追加します。

レイアウトページの追加
 2012092301

 この名前の_(アンダーバー)って何かルール的なもんがあるんでしょうか?とりあえず試しにレイアウトにヘッダーとフッターを設け、ついでにCSSも適用してみます。

レイアウト
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <link href="~/Content/css/default.css" rel="stylesheet" type="text/css" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <header id="header">
        <h1>MVCTestProject</h1>
    </header>
    <div id="main">
        @RenderBody()
    </div>
    <footer id="footer">
        <address>
            これはMVCTestProjectです
        </address>
    </footer>
</body>
</html>

default.css
#header h1 {
    text-align:center;
    background-color: #333;
    color: #FFF;
}

#footer address {
    text-align:center;
    background-color: #333;
    color: #FFF;
}

#main h2 {
    color: #00F;
}

 次にHomeのIndexビューにレイアウト適用してみます。

Indexビュー(Home)
@{
    ViewBag.Title = "Index";
    
    <!-- レイアウトの適用 下記を追加 -->
    Layout = "~/Views/Shared/_LayoutPage.cshtml";
}
 
<h2>Index</h2>

実行結果

2012092302

 レイアウト、CSSともに適用されてますね。それにしてもVS2012の「Page Inspector」は本当に便利です。結果やデザイン確認するのにいちいちブラウザ立ち上げてページ移動してってのが軽減されるのは大きいです。

 個人的に多少は満足出来たので次はいよいよ課題(その1を参照)にあげてたjqueryでテーブルをあれこれにチャレンジしてみます。まずはレイアウトからjqueryを呼び出せるようにします。

レイアウト
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <link href="~/Content/css/default.css" rel="stylesheet" type="text/css" />
    
    <!-- jqueryへの参照を追加 -->
    <script src="~/Scripts/jquery-1.8.1.min.js" type="text/javascript"></script>
    
    <title>@ViewBag.Title</title>
</head>
<body>
    <header id="header">
        <h1>MVCTestProject</h1>
    </header>
    <div id="main">
        @RenderBody()
    </div>
    <footer id="footer">
        <address>
            これはMVCTestProjectです
        </address>
    </footer>
</body>
</html>


 次はテーブル操作系のプラグインに頼ろうかな…といろいろ探してみたんですが、すごくちょうどいいのがありました。「DataTables (table plug-in for jQuery)」です。何か見た感じこれ1つでほとんど解決しちゃいそうです。

 公式からzipをダウンロードし、展開したフォルダ内で必要そうなのだけ抜き出して社員リストのIndexビューにスクリプトとともに設置します。抜き出したファイルは「jquery.dataTables.min.js」「demo_table_jui.css」です。よく分かんなかったり、抜き出すのが面倒な方はmediaというフォルダをまるっと持ってくればOKです。あと、jqueryUIとも連携可能のでjqueryUIのテーマも持ってきました。スクリプトではパラメータの部分で更新列と削除列の検索と並べ替えを禁止してます。

Indexビュー(EmployeeList)
@model IEnumerable<MVCTestProject.Models.EmployeeList>
 
@{
    ViewBag.Title = "社員リスト";
    Layout = "~/Views/Shared/_LayoutPage.cshtml";
}
 
<script src="~/Scripts/jquery.dataTables.min.js"></script>
<link href="~/Content/css/demo_table_jui.css" rel="stylesheet" />
<link href="~/Content/themes/smoothness/jquery-ui-1.8.23.custom.css" rel="stylesheet" />
 
<script type="text/javascript">
    $(function () {
        $('#employeelist').dataTable({
            "bJQueryUI": true,
            "sPaginationType": "full_numbers",
            "aoColumnDefs": [
                { "bSearchable": false, "bSortable": false, "aTargets": [2] },
                { "bSearchable": false, "bSortable": false, "aTargets": [3] }
            ]
        });
    });
</script>
 
<h2>社員リスト</h2>
 
<div>
    @Html.ActionLink("追加", "Update", -1)
</div>
 
<table id="employeelist" class="display">
    <thead>
        <tr>
            <th>
                社員名         
            </th>
            <th>
                配属先
            </th>
            <th>
                更新
            </th>
            <th>
                削除
            </th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model)
{
        <tr>
            <td>
                @Html.DisplayFor(modelitem => item.EmployeeName)
            </td>
            <td style="text-align: center;">
                @Html.DisplayFor(modelitem => item.AssignName)
            </td>
            <td style="text-align: center;">
                @Html.ActionLink("更新", "Update", new { id = item.Id })
            </td>
            <td style="text-align: center;">
                @Html.ActionLink("削除", "Delete", new { id = item.Id })
            </td>
        </tr>       
}
    </tbody>
</table>

 テーブルに<thead>タグと<tbody>タグも追加しています。どうやらこれがないとプラグインが動作しないみたいです。他のプラグインでも動かないケースがあるので覚えておいた方が良さそうです。これで準備OK。さっそく実行してみます。

実行結果

image

 おぉー、中々スマートになったじゃないですか?ちょっと英語の部分を日本語に変えたい気もしますが、それはまた今度で…。

 今回はこれまで。次回はドラッグアンドドロップで並べ替え編です。






HP Directplus オンラインストア
pagetop