ASP.NET MVC - My MVC Applicationを解析してみる (2)LogOn - プレゼンテーション層

ASP.NET MVCのソリューションをデバッグ実行すると最初に起動する
Index.aspxより解析を始めてみます。
以下、そのメモ・・・。

Index.aspxは/Views/Home/Index.aspxが/shared/site.master、/shared/LogOnUserControl.ascxを
参照する形で構成されている。

◆Index.aspx


1: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
これにより主なる画面レイアウトはSite.Master内のHtmlに依存し、Index.aspxはSite.Masterで
記述していないHtmlを実装する。


◆Site.Master


13: <div id="header">
14: <div id="title">
15: <h1>My MVC Application</h1>
16: </div>
17:
18: <div id="logindisplay">
19: <% Html.RenderPartial("LogOnUserControl"); %>
20: </div>
21:
22: <div id="menucontainer">
23:
24: <ul id="menu">
25: <li><%= Html.ActionLink("Home", "Index", "Home")%></li>
26: <li><%= Html.ActionLink("About", "About", "Home")%></li>
27: </ul>
28:
29: </div>
30: </div>
19行目でLogOnUserControl.ascxを参照する。
LogOnUserControl.ascxではユーザー認証の有無によってリンクの表示を切り替える。


画面遷移
Log On リンクをクリックすると、対応するアクションがサーバーで実行され、
LonOnページが結果として返されることにより画面遷移を実現している。

◆LogOnUserControl.ascx


2: <%
3: if (Request.IsAuthenticated) {
4: %>
5: Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
6: [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]
7: <%
8: }
9: else {
10: %>
11: [ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]
12: <%
13: }
14: %>
3行目のif文で認証の有無によって表示するリンクを切り替えて、
11行目でLogOnページに遷移するためのリンクを定義している。

<%= %>で囲まれている箇所がサーバー上で実行され、結果がHtmlとしてブラウザ上に表示されると
http://localhost:ポート番号/Account/Logon というURLとなる。
このURLをクリックすると、サーバー側でAccountコントローラクラス/Logonアクションを実行し、
結果としてアクション名と同じaspx(Logon.aspx)を返す。


今回のまとめ
ASP.NET MVC のプレゼンテーション層の実装として、以下が挙げられるように思える。
1.主となるページ(Index.aspx)が共通処理を実装したページ(Site.Master、LogOnUserControl.ascx)を参照する。
  これにより、従来はIncludeやカスタムタグなどで行っていたView(Html)の共通化を図ることができる。
2.リクエストの処理は、
    1:リクエスト送信
    2:サーバーで対応するアクションの実行
    3:結果をクライアントに送信
  の流れとなる。
  アクションはコントローラ内に実装され、プログラムはControllersフォルダ内に配置される。
  結果はアクション名と同じaspxとなる。