前回は追加・更新・削除とメインとなる機能を作成しました。今回からは見た目の部分をやっていこうかと思います。まずは今後jqueryやcssを使うにあたってレイアウトページがあった方が定義をまとめたりしやすそうなのでレイアウトページを作成します。
プロジェクトにレイアウトページを追加します。
レイアウトページの追加
この名前の_(アンダーバー)って何かルール的なもんがあるんでしょうか?とりあえず試しにレイアウトにヘッダーとフッターを設け、ついでに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>
実行結果
レイアウト、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。さっそく実行してみます。
実行結果
おぉー、中々スマートになったじゃないですか?ちょっと英語の部分を日本語に変えたい気もしますが、それはまた今度で…。
今回はこれまで。次回はドラッグアンドドロップで並べ替え編です。
