2012/09/21

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

 前回の続きです。

 前回はCodeFirstでデータベースを作成し、テンプレートを使ってEntityFrameworkと連動したページを作成しました。今回はテンプレートを使わず、社員テーブルと配属先テーブルを結合したモデルを表示し、それを元にデータを編集するページを作成してみたいと思います。
 
 まずはモデルを定義します。
社員リスト
public class EmployeeList
{
 
    /// <summary>
    /// ID
    /// </summary>
    public int Id { get; set; }
 
    /// <summary>
    /// 社員名
    /// </summary>
    public string EmployeeName { get; set; }

  /// <summary>
    /// 配属先名
    /// </summary>
    public string AssignName { get; set; }

}

 次はコントローラーを作成します。モデルを指定しない空のコントローラーです。

空のコントローラーの作成

2012092101

 では早速、作成したクラスのIndexメソッドをいじくってみます。

Indexメソッド
public ActionResult Index()
{
    var resultList = new List<EmployeeList>();
            
    using(var context = new MvcTestContext())
    {
        var items = from p in context.Employees
                    join g in context.Assigns
                    on p.AssignId equals g.AssignId into gg 
                    from ggg in gg.DefaultIfEmpty()
                    orderby p.SortNumber ascending
                    select new
                    {
                        p.EmployeeId,
                        p.EmployeeName,
                        AssignName = (ggg != null ? ggg.AssignName:string.Empty)
                    };
        
        //どうでもいいけどParallel使うと順序が狂うよ!
    foreach (var item in items)
        {
            resultList.Add(new EmployeeList
            {
                Id = item.EmployeeId,
                EmployeeName = item.EmployeeName,
                AssignName = item.AssignName
            });
        }
    }
 
    return View(resultList);
}

 コード自体は単純なので特に解説は不要でしょう。続けて、ビューも作ります。ビューもせっかくですから空のビューを作ります。

ビューの作成

2012092102

 ではRazorに挑戦します。挑戦とは言っても前回作成したEntityFrameworkと連動したテンプレートを見本にすれば特に難しいこともないです。モデルを宣言し、受けたデータをぶん回してデーブルで表示するだけです。

Index.cshtml
@model IEnumerable<MVCTestProject.Models.EmployeeList>
 
@{
    ViewBag.Title = "社員リスト";
}
 
<h2>社員リスト</h2>
 
<table>
    <tr>
        <th>
            社員名         
        </th>
        <th>
            配属先
        </th>
    </tr>
 
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelitem => item.EmployeeName)
        </td>
        <td>
            @Html.DisplayFor(modelitem => item.AssignName)
        </td>
    </tr>       
}
</table>

 ここで一端ブラウザで表示してみます。

実行結果

2012092103

 どうやら希望通りの結果が表示されてるみたいです(IDは表示する必要ないので省きました。)。

 内容は簡単だったんですが、ちょっと長くなりすぎたのでこの辺で切ります。編集機能は次回にします。






ソフマップ・ドットコム
pagetop