- 追加された行はこの色です。
- 削除された行はこの色です。
Open棟梁Project - マイクロソフト系技術情報 Wiki
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>ASP.NET MVC]]
* 目次 [#xe5726ff]
#contents
*概要 [#h6dc5730]
*ルーティング [#abe121d3]
あらかじめ定義されたルート定義 (URLのパターン) にしたがい、ページハンドラがURLからコントローラやアクションに処理を振り分けること。例えば、ASP.NET MVCでは、デフォルトで以下のようにルーティングが定義されている。(このルート定義は、自由にカスタマイズ可能)
*MVC [#o92da354]
「[[ASP.NET MVCの用語]]」は~
「[[ASP.NET MVCの利用方法]]」と比べて、~
ASP.NET MVCの基本的なトピックをまとめています。
**M(Model)に実装される処理 [#a1340f52]
Modelには、
-B層クラスと、
-B層クラスが返すViewに渡されるEntity, Bean, POCO的なクラス(ViewModel)
がある。
**V(View)に実装される処理 [#ad9a7d3d]
View = 画面表示のための処理。
-マスタページ的なViewと、
-全体View
-部分Viewがある。
**C(Controller)に実装される処理 [#h99848ae]
-Action Methodを実装する。
-Action Methodは、
++「M(Model)」を呼び出して
++「(Bean≒M)」を取得して
++「V(View)」呼び出す。
**モジュールの作成順 [#g4c4867d]
+C(Controller)を作成
+V(View)を作成
+M(Model)を作成
+C(Controller)にAction Methodを追加し、C→M→Vと繋げる。
*C(Controller)関連 [#g454069b]
**URL ルーティング [#abe121d3]
***ルート定義 [#jd50d3a5]
-ルート定義に従い、URLからControllerやAction Methodに処理を振り分ける。
-ユーザがブラウザに URL を入力すると、 ~
指定したルーティング規則を使用し、URL が解析され、Controllerのパスが特定される。
***既定のルート定義 [#ha8fede4]
-既定のルート定義は、RouteConfig.RegisterRoutesメソッドで定義されている。
-ココでMapRoute()メソッドを使用し、ルートパラメタ(routeName, routeValues)を登録する。
-ルートパラメタ(routeName, routeValues)は、URLの作成にも使用される。
-デフォルトでは以下のようにルート定義されている(自由にカスタマイズ可能)
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
***属性ルーティングによるルート定義 [#b8f1690b]
-個別のルート定義は、RouteConfig.RegisterRoutesメソッドで定義されている。
-ココでMapMvcAttributeRoutes()メソッドを使用し、属性ルーティングを有効化する。
routes.MapMvcAttributeRoutes();
-以下のようにルート定義可能(自由にカスタマイズ可能)
[Route("{controller}/{action}/{id}", Name="xxxx")]
--第一引数には、MapRouteの「URL with parameters」と同じものを指定。
--第二引数のNameはオプションで、[[Htmlヘルパー>#r27d7319]](@Html.RouteLink)で使用できる。
-また、パラメタについて、以下の様な設定を行うことができる。
--オプション設定
--既定値の設定
--制約条件の設定
---データ型指定
---値範囲指定
---正規表現指定
---カスタム制約条件指定
-その他、モデルレベルに既定のActionMethod名を追加可能。
[Route("{action=Top")]
public class XXXXXController : Controller
{
public ActionResult Top() { ・・・ }
}
***ルートプレフィックスの定義 [#n5003deb]
ルートプレフィックスを使用すると、モデルレベルに、~
「URL with parameters」のルート部分の定義を追加できる。
***呼び出されるAction Methodとその引数 [#jff515f7]
この時、ブラウザから
http://server/applicationname/Products/Index/1
というURLでリクエストを送信した場合、ルート定義にしたがい、ページハンドラは
-コントローラ名:Products
-アクション名:Index
-id (アクションに渡す値):1
というURLでリクエストを送信した場合、
http://(Server FQDN名)/(Controller名)/(Action Method名)/(id 値)
ルート定義に従い、ページハンドラは
-Controller名:Products
-Action Method名:Index
-id (Action Methodに渡す値):1
と判断し、Products コントローラの Index アクションを呼び出し、アクションの引数として "1" を渡す。~
と判断し、
*スキャフォールディング [#e701b267]
ASP.NET MVC のコントローラクラスに対して、データベースの CRUD 操作を行うアクションメソッドのひな形を自動生成する機能。ADO.NET Entity Framework によるデータ操作を行う場合、アクションメソッドに加えて View も自動生成できる。
Products Controllerの Index Action Methodを呼び出し、Action Methodの引数として "1" を渡す。~
Action Method名と id 値は省略可能で、Action Method名を省略すると、Index Action Methodが実行される。
**Webページのビューエンジン [#z40de977]
-ASP.NET MVC アプリケーションのコントローラーとアクション メソッド~
https://msdn.microsoft.com/ja-jp/library/dd410269.aspx
**Action Method [#w8313d08]
***リクエストデータの取得方法 [#i5d9821b]
-引数とのマップの方法
--[[単方向バインディング>#t62a5795]]~
POST や GET のパラメタの名前と一致した引数を定義しておけば、自動的にマップされる。
---Get ならクエリ文字列のキー名
---Post ならフォームデータのキー名
---モデルバインディング~
Modelクラスを使うこともできる(Property名と一致させる)。
--[[双方向バインディング>#i0697eb3]]~
---ControllerのActionMethodとViewの間に、~
ポストバック的な復元動作がある場合に便利。
---Modelクラスを使う(Post の場合のみ)。
-その他
--FormCollection を使う (Post の場合のみ)~
<form> の中身がコレクション型として保持されたもの。
***戻り値 [#pcb22e7a]
Action Methodの結果として、Action Resultを返す。~
詳細は[[Action Result>#q3d2aae4]]を参照。
**単方向バインディング [#t62a5795]
-クライアントから送信されてきたデータのキー名と、~
ControllerのAction Methodの引数名とが一致するキー値を探して、バインドする。
-非常に単純な仕組みのため、[[ASP.NET Web Forms]]に比べて、~
単体テストが遣り易くなっている反面、オーバーポスティング攻撃を受け易く、~
セキュリティ的に脆弱とまでは言えないが、課題があると言える。~
-仕組みの詳細は、下記を参照。
***ValuProvider [#k15b5de0]
Requestを検索してValueを取得するクラス。
-既定のValuProvider
|項番|ValuProvider|値取得元|h
|1|ChildActionValueProvider|子アクション|
|2|FormValueProvider|フォーム値|
|3|RouteDataValueProvider|Routeデータ|
|4|QueryStringValueProvider|クエリ文字列|
|5|HttpFileCollectionValueProvider|HTTPファイルのコレクション|
-その他のValuProvider
|項番|ValuProvider|値取得元|h
|1|JsonValueProvider|Json|
|2|CookieValueProvider|Cookie|
|3|SessionValueProvider|Session|
|4|ServerVariablesValueProvider|ServerVariables|
|5|TempDataValueProviderFactory|TempData|
-ValueProviderの処理順~
上記の既定のValuProviderはController.ValueProviderの順番と同じ~
(同じキー名の場合、ValuProviderの順に先勝になる)
-ValueProviderの追加~
以下のValueProviderFactoryで順に新規ValueProviderを追加できる。
--実装(Global.Application_Startに実装
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
ValueProviderFactories.Factories.Add(new CookieValueProviderFactory());
ValueProviderFactories.Factories.Add(new SessionValueProviderFactory());
ValueProviderFactories.Factories.Add(new ServerVariablesValueProvider());
ValueProviderFactories.Factories.Add(new TempDataValueProviderFactory());
--参考
---ValueProviderFactory クラス (System.Web.Mvc)~
https://msdn.microsoft.com/ja-jp/library/system.web.mvc.valueproviderfactory.aspx
-カスタムValueProviderの自作~
カスタムのValueProviderを実装するために以下のI/Fを使用する。
--IValueProvider(値プロバイダーに必要なメソッドを定義)
--IEnumerableValueProvider(列挙に必要なメソッドを定義)
--IUnvalidatedValueProvider(検証スキップに必要なメソッドを定義)
***ModelBinder [#w5a4ae08]
-ModelBinderは、ValuProviderから必要なデータを取得し、Modelに対して値の設定を行う。
-DefaultModelBinderは、前述の「既定のValuProvider」から必要なデータを検索する。
-カスタムModelBinderの自作も可能。
***ModelBinder属性 [#ne32feb7]
前述のModelBinderの動作を制御する。
通常、
-コレクション系はForm
-プリミティブ型はQueryString
から取得するようになっているが、
以下の属性をAction Methodの引数に対して使用すると、この動作を変更できる。
-FromUri属性~
QueryStringから値を取得するように制御。
-FromBody属性~
Formから値を取得するように制御。
***Bind属性 [#sbe2a0c1]
[[ASP.NET MVC]]は、[[ASP.NET Web Forms]]と比べて、~
オーバーポスティング攻撃を受け易いため引数を明記する仕組み。
-基礎
--Bind属性の引数
---Prefix : Formのname属性のPrefix~
http://stackoverflow.com/questions/1317523/how-to-use-bind-prefix
---Include : Bind対象のProperty名(カンマ区切り)
---Exclude : Bind禁止のProperty名(カンマ区切り)
--設定方法~
[[Action Method>#w8313d08]]に以下の様な属性を付与する。
---[Bind(Include = "PropName1, PropName2...")]
---[Bind(Exclude = "PropName3, PropName4...")]
---[Bind(Include = "PropName1, PropName2...", Exclude = "PropName3, PropName4...")]
-応用(コレクションをBindするときのname or keyの設定方法)~
http://qiita.com/kazuhisam3/items/94542f6d7ccf3acca41c#%E8%A4%87%E5%90%88%E5%9E%8B%E3%81%AE%E9%85%8D%E5%88%97
--配列 or リスト系
---VariableName[n].PropertyName
---[n].PropertyName
--Dictionary系 :
---VariableName[n].Key, VariableName[n].Value.PropertyName
---[n].Key, [n].Value.PropertyName
***参考 [#g93c57b7]
-モデルバインディング
--ASP.NET モデルバインディング - Qiita~
http://qiita.com/kazuhisam3/items/94542f6d7ccf3acca41c
--ASP.NET WEB API モデルバインド その1 値の取得先 - miso_soup3 Blog~
http://miso-soup3.hateblo.jp/entry/20130204/1359976197
--ASP.NET MVC - ASP.NET MVC モデル バインディングの特長と問題点~
https://msdn.microsoft.com/ja-jp/magazine/hh781022.aspx
-DefaultModelBinder
--強力になったDefaultModelBinder~
http://takepara.blogspot.jp/2009/02/defaultmodelbinder.html
-ValueProvider
--ValueProviderを扱うときに気をつけること - miso_soup3 Blog~
http://miso-soup3.hateblo.jp/entry/20120625/1340633706
**双方向バインディング [#i0697eb3]
-ControllerのActionMethodとViewの間に、ポストバック的な復元動作がある場合に便利。
-Modelクラスを使う(Post の場合のみ)。
***[[Modelプロパティ>#c1b6b351]] [#aa9798ee]
@modelで定義したModelプロパティと、
***[[Html.xxxxFor>#o7472bbe]] [#ff74597c]
の[[Htmlヘルパー>#r27d7319]]を使用する。
***双方向バインディングの方法 [#q83170a7]
以下のように双方向バインドする。
-Controller
return View(vm);
-Viewスクリプト
@Model ViewModel
・・・
Html.TextBoxFor?(model => model.Category)
通常、Modelプロパティは、Modelでアクセスするが、
ここでのmodelは[[ラムダ式>ラムダ式って]]の仮引数名なので自由。
***[[XxxxxとXxxxxFor>#o7472bbe]]の違い [#q79b636e]
-[[XxxxxForメソッド>#o7472bbe]]は、モデルバインディングに対応する
--要素名(id, name属性)を自動で設定するため、
--要素名(id, name属性)を指定する引数が無い。
-参考
--Label/TextBox/TextArea/Password/Hidden/ RadioButton/CheckBoxメソッド[Razor] - Build Insider~
http://www.buildinsider.net/web/bookaspmvc5/040207
--TextBoxFor/TextAreaFor/PasswordFor/ HiddenFor/RadioButtonFor/CheckBoxForメソッド[Razor] - Build Insider~
http://www.buildinsider.net/web/bookaspmvc5/040203
**Action Result [#q3d2aae4]
Controller のAction Methodは、View の選択と指示として、~
[[ActionResult>https://msdn.microsoft.com/ja-jp/library/system.web.mvc.actionresult.aspx]] クラスのオブジェクトを返す必要がある。
Action Methodで、
return View();
と、Viewを指定しないoverloadで呼び出すと、
/Views/コントローラ名/アクション名.cshtml
を呼び出す。
***ActionResultの種類とヘルパー・メソッド [#o5927f4e]
ActionResult クラスには、以下の種類が存在する。
|項番|種類|概要・用途|コード例(ヘルパー・メソッド)|h
|1|ViewResult|指定された全体 View の表示を指示する。&br();基本的には [[HTML.BeginForm>#w59fdfea]] の場合に使用する。|return View("Result");&br();("Result" は全体 View 名)|
|2|PartialViewResult|指定された部分 View の表示を指示する。&br();基本的には [[Ajax.BeginForm>#mb6e9e4d]] の場合に使用する。|return PartialView("Result");&br();("Result" は部分 View 名)|
|3|RedirectResult|指定した URL にリダイレクトする場合に使用する。|return Redirect("http://www.wings.msn.to/");|
|4|RedirectToActionResult|指定した Controller, Action にリダイレクトする場合に使用する。|return RedirectToAction("Index");|
|5|~|指定したルートパラメタ(routeName, routeValues)にリダイレクトする場合に使用する。|return RedirectToRoute("View Product", new { ProductName = <商品名> });|
|6|FilePathResult|指定されたパスの内容をファイルとして出力|return File("C:\temp\file.zip", "application/zip", "file.zip");|
|7|FileContentResult|byte配列の内容をファイルとして出力|return File(bytes, "application/pdf");|
|8|FileStreamResult|ストリームの内容をファイルとして出力|return new FileStreamResult(fileStream, "application/pdf");|
|9|ContentResult|プレーン・テキストを出力(CSV出力等)|Return Content("こんにちは、世界!", "text/plain");|
|10|JsonResult|指定されたコンテンツをJSONとして出力(Ajax通信)|return Json(JsonConvert.SerializeObject(result), JsonRequestBehavior.AllowGet);|
|11|JavaScriptResult|指定されたコンテンツをJavaScriptスクリプトとして出力|return JavaScript(code);|
|12|EmptyResult|何もしない|-|
-c# - RedirectToAction and RedirectToRoute - Stack Overflow~
http://stackoverflow.com/questions/8944355/redirecttoaction-and-redirecttoroute
-参考
--ActionResult クラス~
https://msdn.microsoft.com/ja-jp/library/system.web.mvc.actionresult.aspx
--ASP.NET MVC ActionResultの派生型 | 宇宙仮面の研究室~
https://uchukamen.wordpress.com/2011/02/06/asp-net-mvc-actionresult%E3%81%AE%E6%B4%BE%E7%94%9F%E5%9E%8B/
--連載:ASP.NET MVC入門:第3回~
ActionResultオブジェクトでアクション操作も自由自在 - @IT~
--- (1/5)~
http://www.atmarkit.co.jp/ait/articles/0907/10/news109.html
--- ~ (5/5)~
http://www.atmarkit.co.jp/ait/articles/0907/10/news109_5.html
***HttpStatusCodeResult [#e8677bb1]
Viewではなく、HTTP状態コードを返す。
|項番|種類|概要・用途|コード例(ヘルパー・メソッド)|h
|1|HttpStatusCodeResult|任意のHTTP応答コードをセット|-|
|2|HttpUnauthorizedResult|HTTP応答コード「401 Unauthorized」をセット|-|
|3|HttpNotFoundResult|HTTP応答コード「404 NotFound」をセット|-|
-System.Web.Mvc.HttpStatusCodeResult~
https://msdn.microsoft.com/ja-jp/library/system.web.mvc.httpstatuscoderesult.aspx
--System.Web.Mvc.HttpNotFoundResult
--System.Web.Mvc.HttpUnauthorizedResult
***ActionResultの自作 [#kfbc71ec]
可能
**属性 [#radd223d]
***フィルタ属性 [#w535e86f]
-フィルタ属性は、ActionMethodに、以下の様な共通的な処理を追加するために使用する。
--認証処理
--例外処理
--ロギング
--, etc.
-フィルタ属性は、以下に設定可能である。
|項番|適用範囲|設置場所|説明|h
|1|ActionMethod Filter|ActionMethod|ActionMethod単位|
|2|Controller Filter|Controller|Controller単位|
|3|Global Filter|FilterConfig|Application単位|
-以下のフィルタ属性分類があり、実装される処理は項番の順番に呼び出される。
|項番|分類|実装するI/F|実装する処理|h
|1|認証|IAuthenticationFilter|認証に関係する処理|
|2|承認|IAuthorizationFilter|承認(認可)に関係する処理|
|3|Action|IActionFilter|ActionMethodの開始処理の前後処理|
|4|Result|IResultFilter|ActionMethodの終了処理の前後処理|
|5|例外|IExceptionFilter|例外処理|
|6|Override|IOverrideFilter|上位フィルタを上書き|
-標準のフィルタ属性には以下の様なものがある。
|項番|分類|属性|概要|h
|1|承認|Authorize属性|認証済みアクセス(Cookie認証、Token認証)|
|2|承認|[[ChildActionOnly>#fd003375]]属性|子アクションとしてのみ呼び出し可能に設定|
|3|承認|RequireHttps属性|HTTPSアクセスのみ呼び出し可能に設定|
|4|承認|[[ValidateInput]]属性|[[XSS対策に使用する。>https://msdn.microsoft.com/en-us/library/hh882339.aspx]]|
|5|承認|[[ValidateAntiForgeryToken>ASP.NET MVCの利用方法#y1268547]]属性|CSRF対策に使用する。|
|6|例外|HandleError属性|<CustomErrors mode="On or RemoteOnly"/>&br;+FilterConfigに設定した時のカスタムエラーページの定義|
|7|Action/例外/Result|OutputCache属性|出力キャッシュルールの定義|
|8|Action/Result|AsyncTimeout属性|非同期処理のタイムアウトの定義|
|9|Override|OverrideAuthentication属性|グローバル・モデルなど上位で定義されたフィルタを上書き|
|~|~|OverrideAuthorization属性|~|
|~|~|OverrideAction属性|~|
|~|~|OverrideResult属性|~|
|~|~|OverrideException属性|~|
-フィルタ属性は、自作可能。
-参考
--Filters | Microsoft Docs~
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters
***セレクタ属性 [#y240e1ac]
ControllerからのActionMethodの呼び出しを制御する。
|項番|属性|概要|h
|1|[[HttpXxxxx>ASP.NET MVCの利用方法#qa67aa3b]]属性|Action Methodが受け付けるHTTP Methodを指定|
|2|[[AcceptVerbs>ASP.NET MVCの利用方法#qa67aa3b]]属性|Action Methodが受け付ける1つ以上のHTTP Methodを指定|
|3|NonAction属性|Action Methodでないことを明示する。|
|4|[[ActionName>ASP.NET MVCの利用方法#mbf9d5ab]]属性|Action Method名と別名のAction Nameを付与する。|
セレクタ属性は、自作可能。
**非同期Controller [#lc319892]
***[[C10K問題>C10k problem (C10K問題)]] [#yda40e32]
この技術の登場の背景には [[C10k problem (C10K問題)]]と言うものがある模様。
-ASP.NET MVC での非同期コントローラーの使用~
https://msdn.microsoft.com/ja-jp/library/ee728598.aspx
--非同期Controllerを使用すると、[[async/await]]を使用し、~
Webサーバのスレッド枯渇を防ぐことができる。
--実行に時間のかかる CPU バインド以外の要求に非同期Controllerを使用すると、~
Webサーバの待機スレッドを他に転用可能になるので、Webサーバのスレッド数を節約し、~
スレッド枯渇による「HTTP 503 (サーバーがビジー状態です。)」を防止できる。
--図から、リクエスト処理開始時とレスポンス処理終了時のスレッドが変わることが解る。~
後のスレッドは独立したスレッドプールから取得する。複雑なのでオーバーヘッドがある。
[[内部的には、I/O完了ポートを使用しているものと思われる。>async/await#s4df3070]]
***使い方 [#y811b998]
-旧(AsyncControllerを継承する。)
--AsyncController を継承する。
--以下の命名規約を守ったAction Methodを定義する。
---ActionNameAsync
---ActionNameCompleted(delegate)
-Task<ActionResult>を返す。~
MVC 4 以降であれば、以下のように書ける。
--Action Method内部でTaskを使用する場合、
public Task<ActionResult> Index()
--Action Method内部で[[async/await]]キーワードを使う場合、
public async Task<ActionResult> Index()
***参考 [#c1c3ca5f]
-非同期コントローラを使ってみた - しばやん雑記~
http://blog.shibayan.jp/entry/20100715/1279204349
-ASP.NET MVC 4 の新機能、タスク対応の非同期コントローラを使う - しばやん雑記~
http://blog.shibayan.jp/entry/20111105/1320495813
*M(Model)関連 [#ue2c093c]
ここでは、B層クラスではなく、
>「B層クラスが返すViewに渡される~
Entity, Bean, POCO的なクラス(ViewModel)」
について説明する。
**ViewBag, ViewData, TempData [#m41f8886]
ControllerからViewにデータを渡すときに使用する入れ物的なモノ。
-参考
--ViewData vs ViewBag vs TempData - 夜になったら寝る~
http://kyabatalian.hatenablog.com/entry/2015/12/05/232504
***ViewBag [#z43ab48b]
-ViewBag は dynamic object。
***ViewData [#qe522f71]
-ViewData は Dictionary。
***TempData [#i059f7bd]
-TempData は Dictionary。
-TempData は保持されるため、リダイレクト先に値を渡したいときなどに使う。
-TempData の詳しい動作は、以下が参考になる。
--ASP.NET MVC TempData は”次のリクエスト”以降も参照できる - miso_soup3 Blog~
http://miso-soup3.hateblo.jp/entry/2013/12/14/070356
**Modelプロパティ [#c1b6b351]
Viewスクリプトから強く型付けされたViewModelを参照する際に使用する。
***使い方 [#ndc87274]
-次の旧構文を使用している場合は、
@inherits System.Web.Mvc.WebViewPage<ViewModelClass>
-次の構文に置き換える。
@model ViewModelClass
-@modelキーワードで指定したViewModelに対しては、Modelプロパティでアクセスする。
--ControllerからViewにModelを渡す。
return View(vm);
--ViewスクリプトでModelを使う。
@Model ViewModel
***参考 [#l9f7b7d2]
-ASP.NET MVC 3: Razorの@model新キーワード:CodeZine(コードジン)~
https://codezine.jp/article/detail/5549
--ScottGu's Blog - ASP.NET MVC 3: New @model keyword in Razor~
https://weblogs.asp.net/scottgu/asp-net-mvc-3-new-model-directive-support-in-razor
*V(View)関連 [#h3fb6308]
View には、
-画面全体を表す「[[全体 View>#a6a0c6e0]]」と、
-画面の一部分のみを表す「[[部分 View>#t0b33738]]」がある。
**ビューエンジン [#z40de977]
Webページのビューエンジンには以下の2つのものがある。
***ASPX [#u5044497]
従来の ASP.NET と同様、式やコードブロックを <% ~ %> で囲む記述形式。~
従来の ASP.NET と同様、~
式やコードブロックを コード・ナゲット(<% ~ %>)で囲む記述形式。~
View の拡張子も、従来の ASP.NET と同様、「*.aspx」で表される。
***Razor [#id4ef38b]
***Razor(主流) [#id4ef38b]
ASP.NET MVC 3 で登場したビューエンジン。~
式やコードブロックの先頭に「@」を付与する記述形式。~
式やコードブロックの先頭に「@」を付与する記述形式で、~
冗長なコード・ナゲット(<% ~ %>)が不要になる。~
View の拡張子は、C# の場合は「*.cshtml」、VB の場合は「*.vbhtml」で表される。
***ASPX と Razor の記述方法の比較 [#x2a40d87]
||ASPX|Razor|
|インライン式 (プロパティの値を表示する場合など)|<%: Model.Property1 %>|@Model.Property1|
|インライン式 (エスケープ処理をスキップし、プロパティの値をそのまま表示する場合)|<%= Model.Property1 %>|@Html.Raw(Model.Property1)|
|コードブロック (ロジックを直接 View に記述する場合) (C#)|<% string str = "あいうえお"; %>|@{ string str = "あいうえお"; }|
|コードブロック (ロジックを直接 View に記述する場合) (VB)|<% Dim str As String = "あいうえお" %>|@Code&br; Dim str As String = "あいうえお"&br;End Code|
***参考 [#kb9c52d6]
-C# Razor構文 基礎文法 総まとめ - @IT~
http://www.atmarkit.co.jp/fdotnet/rapidmaster/rapidmaster_03/rapidmaster_03.html
-第5回 新しいビュー・エンジン「Razor」の基本を理解しよう - @IT~
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_06/aspnetmvc3_06_01.html
-ASP.NET MVC 3 開発入門 (12) - Razor の文法 - しばやん雑記~
http://blog.shibayan.jp/entry/20110317/1300294985
-ASP.NET MVC のビューは ASPX ではなく Razor を~
http://miso-soup3.hateblo.jp/entry/2013/12/02/030906
**HTMLヘルパー [#r27d7319]
従来の ASP.NET では、ASP.NET Web コントロールを使用して、ラベルやテキストボックスなどのコントロールを表示していたが、ASP.NET MVC では、ASP.NET Web コントロールは使用できない。その代わりに、ASP.NET MVC では HTML ヘルパーを使用する。~
ASP.NET MVC では、主に以下のような HTML ヘルパーが使用できる。
||HTML ヘルパー|
|フォーム <form>|Html.BeginForm または Ajax.BeginForm|
|リンク <a>|Html.ActionLink|
|テキストボックス <input type="text">|Html.TextBox または Html.TextBoxFor|
|テキストエリア <textarea>|Html.TextArea または Html.TextAreaFor|
|パスワード <input type="password">|Html.Password または Html.PasswordFor|
|チェックボックス <input type="checkbox">|Html.CheckBox または Html.CheckBoxFor|
|ドロップダウンリスト <select>|Html.DropDownList または Html.DropDownListFor|
|リストボックス <select>|Html.ListBox または Html.ListBoxFor|
|ラジオボタン <input type="radio">|Html.RadioButton または Html.RadioButtonFor|
|隠しフィールド <input type="hidden">|Html.Hidden または Html.HiddenFor|
**全体 View [#a6a0c6e0]
通常のViewはコレ。
なお、ボタンを生成する HTML ヘルパーはないため、直接 <input type="button"> または <input type="submit"> を記述する。
**部分 View [#t0b33738]
部分 View は、「Partial View」ともいわれ、以下の用途で使われる。
***Html.xxxx と Html.xxxxFor の使い分け [#w65ae609]
Html.TextBox("Category") のように、プロパティを文字列で指定する場合は、"For" がつかない HTML ヘルパーを使用する。~
Html.TextBoxFor(model => model.Category) のように、プロパティをラムダ式で指定する場合は、"For" で終わる HTML ヘルパーを使用する。
--画面の共通化のため~
ASP.NET のユーザーコントロールのように、共通的な画面コンポーネントを部品化しておくもの。
--[[Ajax.BeginForm>#mb6e9e4d]] の部分更新の範囲を表すため~
[[Ajax.BeginForm>#mb6e9e4d]] を使用した非同期処理の場合、部分更新の範囲を部分 View で定義する。
**マスターページによる画面共通化 [#p750bb82]
ヘッダーやフッター、サイドメニューなどをアプリケーションで共通的に表示させたい場合、マスターページを使用してレイアウトを共通化させることができる。~
マスターページには、画面ごとに個別実装が必要な箇所を定義する。ビューエンジンが ASPX の場合は、従来の ASP.NET と同様 ContentPlaceHolder を使用する。ビューエンジンが Razor の場合は、RenderBody を使用してメインのコンテンツ領域を定義する。メインのコンテンツ領域以外に、画面ごとに個別実装が必要な箇所を定義する場合、RenderSection を使用して「セクション」と呼ばれるサブのコンテンツ領域を定義する。
***配置場所 [#kccfbcd1]
-/View/Shared/_XXXXPartial.cshtml
-/View/Controller名/_XXXXPartial.cshtml (優先)
***使用方法(部分Viewだけ呼び出す) [#fddc6d15]
-通常
@Html.Partial("_XXXXPartial", model)
-検索機能無し(仮想パス)
@RenderPage("~/View/Controller名/_XXXXPartial.cshtml", model)
-HTML文字列を戻さず、応答ストリームに直接書き出す。~
ViewDataDictionaryの独自のコピーを取得するので、親のViewDataには影響を与えない。
@{ Html.RenderPartial("_XXXXPartial", model); }
-参考
--.net - Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction - Stack Overflow~
http://stackoverflow.com/questions/5248183/html-partial-vs-html-renderpartial-html-action-vs-html-renderaction
***使用方法(Action Methodと部分Viewの両方を呼び出す) [#fd003375]
-子Action Methodの定義
--子Action Methodの定義は、部分Viewが固有データを必要とする場合に追加する。
--通常、全体Viewを呼び出すControllerに、部分Viewの子Action Methodの定義を追加する。
--Action Methodの実行を部分Viewの呼び出し時に限定する場合、[ChildActionOnly]属性を追加する。
--子Action MethodがActionResultを帰す場合、PartialView()ペルパー・メソッドを使用する。
[ChildActionOnly]
public ActionResult Current()
{
・・・
return PartialView("_XXXXPartial", partialViewModel);
}
-子Action Methodの呼び出し
--通常
@Html.Action("XXXX", model)
--HTML文字列を戻さず、応答ストリームに直接書き出す。~
ViewDataDictionaryの独自のコピーを取得するので、親のViewDataには影響を与えない。
@{ Html.RenderAction("XXXX", model); }
**Htmlヘルパー [#r27d7319]
(Viewヘルパーという呼称もあるようだが、~
ここではHtmlヘルパーという呼称に統一する)
従来の ASP.NET では、ASP.NET Web コントロールを使用して、~
ラベルやテキストボックスなどのコントロールを表示していたが、
ASP.NET MVC では、基本的に、以下の様な便利な機能が実装されているHtmlヘルパーを使用する。
-Htmlヘルパーは、サニタイジング処理などを同梱する。
-また、Htmlヘルパーは、[[DataAnnotationの内容を元に表示内容を制御できる。>ASP.NET MVCの利用方法#yb8830b1]]
***主な Htmlヘルパー [#v09eb480]
ASP.NET MVC では、主に以下のような Htmlヘルパーが使用できる。
-表示のためのHtmlヘルパー
|項番|HTMLタグ|Htmlヘルパー|h
|1|データの表示|Html.DisplayFor|
|2|入力可能なデータの表示|Html.EditorFor|
|3|ラベルの表示1|Html.DisplayNameFor|
|4|ラベルの表示2|Html.LabelFor|
-HTMLタグに対応したHtmlヘルパー
|項番|HTMLタグ|Htmlヘルパー|h
|1|フォーム <form>|[[HTML.BeginForm>#w59fdfea]] または [[Ajax.BeginForm>#mb6e9e4d]]|
|2|リンク <a>|Html.ActionLink|
|3|テキストボックス <input type="text">|Html.TextBox または Html.TextBoxFor|
|4|テキストエリア <textarea>|Html.TextArea または Html.TextAreaFor|
|5|パスワード <input type="password">|Html.Password または Html.PasswordFor|
|6|チェックボックス <input type="checkbox">|Html.CheckBox または Html.CheckBoxFor|
|7|ドロップダウンリスト <select>|Html.DropDownList または Html.DropDownListFor|
|8|リストボックス <select>|Html.ListBox または Html.ListBoxFor|
|9|ラジオボタン <input type="radio">|Html.RadioButton または Html.RadioButtonFor|
|10|隠しフィールド <input type="hidden">|Html.Hidden または Html.HiddenFor|
-URL生成
|項番|HTMLタグ|Htmlヘルパー|h
|1|「~/...」を仮想パスに変換|Url.Content|
|2|Controller、ActionMethod名などから仮想パスを生成|Url.Action|
|3|RouteValueDictionaryから仮想パスを生成|Url.RouteUrl|
-なお、ボタンを生成する Htmlヘルパーはないため、~
直接 <input type="button"> または <input type="submit"> を記述する。
***Modelバインディング用のHtmlヘルパー [#o7472bbe]
Html.xxxx と Html.xxxxFor の2種類のHtmlヘルパーがある。
-Html.xxxx~
''Model から View への[[単方向バインディング>#t62a5795]]''。~
Html.TextBox("Category") のように、~
プロパティを文字列でマップ指定する場合は、~
"For" がつかない Htmlヘルパーを使用する。
-Html.xxxxFor~
''Model ⇔ View の[[双方向バインディング>#i0697eb3]]''。
--...Forという名称のHtmlヘルパーは、ViewとModelの間での[[双方向バインディング>#i0697eb3]]を行う。
--Html.TextBoxFor(model => model.Category) のように、~
プロパティをラムダ式でマップ指定する場合は、"For" で終わる Htmlヘルパーを使用する。
>ただし、HTTP を経由しての[[双方向バインディング>#i0697eb3]]になるので、~
処理方式的には、以下のような処理シーケンスになる。
--POST 時に、Html.TextBoxFor などへの入力値を、自動的に Model に復元する。
--Controller は、復元された Model から情報を取得して処理を行う。
**マスターページ [#ycd23a70]
ヘッダーやフッター、サイドメニューなどをアプリケーションで共通的に表示させたい場合、~
マスターページを使用してレイアウトを共通化させることができる。~
マスターページには、画面ごとに個別実装が必要な箇所を定義する。
***ビューエンジン [#g5621ed9]
-ビューエンジンが ASPX の場合は、従来の ASP.NET と同様 ContentPlaceHolder を使用する。
-ビューエンジンが Razor の場合は、RenderBody を使用してメインのコンテンツ領域を定義する。
***配置場所と使用方法 [#hed3f79f]
-アプリケーション共通
--配置場所
---/View/Shared/_Layout.cshtml
--使用方法
---/View/Shared/_ViewStart.cshtml のLayoutプロパティ経由で呼び出される。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
-View単位
--配置場所
---/View/Shared/_XXXXLayout.cshtml
---/View/Controller名/_XXXXLayout.cshtml (優先)
--[[使用方法>#de4835d8]]
***マスターページへのセクションの定義 [#x99b0c9c]
メインのコンテンツ領域以外に、画面ごとに個別実装が必要な箇所を定義する場合、~
RenderSection を使用して「セクション」と呼ばれるサブのコンテンツ領域を定義する。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<!-- メインのコンテンツ領域を描画する場所を定義 -->
@RenderBody()
@Scripts.Render("~/bundles/jquery")
<!-- セクション (サブのコンテンツ領域) を描画する場所を定義 -->
@RenderSection("scripts", required: false)
</body>
</html>
例えば、上記のようにマスターページを定義した場合、各画面では以下のように実装する。
***マスターページの利用 [#j06a55f0]
-例えば、上記のようにマスターページを定義した場合、~
各コンテンツページでは以下のように実装する。
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml"; // 使用するマスターページを指定
}
@* メインのコンテンツ領域 *@
<h2>Index</h2>
@* セクション (サブのコンテンツ領域) *@
@section scripts{
<script type="text/javascript">
...
</script>
}
上記のように、セクションを実装する場合、C# の場合は「@section <セクション名> { ~ }」、VB の場合は「@Section <セクション名> ~ End Section」で囲む必要がある。
-上記のように、セクションを実装する場合、
--C# の場合は「@section <セクション名> { ~ }」、
--VB の場合は「@Section <セクション名> ~ End Section」
**ADO.NET Entity Framework のコードファースト機能 [#zb82cea5]
ADO.NET Entity Framework 4.1 で登場した機能。ASP.NET MVC のモデルに POCO でデータ構造を定義すると、その定義に従ってデータベースにテーブルが作成される。ソースコードのみで完結し、Entity Framework の Entity Data Model (EDM) などを明示的に作成する必要がなくなるため、より迅速な開発が可能となる。~
(モデルクラスへのデータ構造の定義が、そのままデータベースのテーブル設計となる)
>で囲む必要がある。
**ASP.NET MVC 4 の新機能 [#b06c540b]
***プロジェクトテンプレートの追加 [#k159317d]
Facebook キャンバスアプリを簡単に作成するための「Facebookアプリケーション」テンプレートや、シングルページ アプリケーションを作成するための「シングル ページ アプリケーション」テンプレートが追加された。
***マスターページのネスト [#de4835d8]
-/View/Controller名/YYYY.cshtml のLayoutプロパティ経由で呼び出される。~
***モバイルデバイス対応 [#gae80c09]
ASP.NET MVC 4 で追加された「モバイル アプリケーション」テンプレートを使用して、モバイルデバイス向けアプリケーションを作成できる。このテンプレートでは、jQuery Mobile をベースとしており、タッチ操作に最適化した UI を構築できる。
--
@{
Layout = "~/Views/Shared/_XXXXLayout.cshtml";
}
***複数ブラウザに対応させるためのディスプレイモード [#i6400115]
ASP.NET MVC のディスプレイモードを利用すると、PC 向けサイト、モバイル向けサイトのように、ブラウザに応じてレイアウトを変えることができる。ディスプレイモードは、Global.asax の Application_Start メソッドに定義することで使用できる。~
例えば、iPhone 向けのディスプレイモードを定義したい場合は、以下のように実装する。
protected void Application_Start()
{
(中略)
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone")
{
ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});
--
@{
Layout = "~/View/Controller名/_YYYYLayout.cshtml";
}
この時、通常の「Index.cshtml」と同じフォルダに「Index.''iPhone''.cshtml」を作成し、iPhone 向けのレイアウトを定義すると、
-[[Htmlヘルパー>#r27d7319]]・メソッドの第二引数にLayoutスクリプト名を指定する。
http://server/application/Controller/Index/id
--
return View("YYYY, "_XXXXLayout");
という同じ URL に対し、PC のブラウザからアクセスした場合は「Index.cshtml」が使用され、iPhone からアクセスした場合は「Index.''iPhone''.cshtml」が使用されるようになる。
--
return View("YYYY, "_YYYYLayout");
***Web API [#s5b3bcda]
RESTful な HTTP サービスを構築するためのフレームワーク。~
既定では、以下のようにルーティングが定義されている。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
したがって、Web API のアクションを呼び出す際の URL は以下のようになる。
http://server/application/Controller/id
ASP.NET MVC と違い、Web API のルート定義にはアクションの指定がない。Web API を使用した場合、リクエストの HTTP メソッドに応じて、以下のようにコントローラのアクションが自動的に呼び出される。
|HTTP メソッド|呼び出されるメソッド|
|GET|"Get" で始まる名前のメソッド|
|POST|"Post" で始まる名前のメソッド|
|PUT|"Put" で始まる名前のメソッド|
|DELETE|"Delete" で始まる名前のメソッド|
Web API を利用した場合のコントローラの例を以下に示す。同じコントローラの中で GET に対応したメソッドを複数定義したい場合などは、以下のようにオーバーロードで対応できる。
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
***マスターページの選択 [#u26391c0]
-以下のsectionで選択する場合、~
if文などを使用して、Layoutプロパティに設定する*Layout.cshtmlを切り替える。
@{
Layout = "~/Views/Shared/_XXXXLayout.cshtml";
}
***OAuth / OpenID 対応 [#z14b0107]
ASP.NET MVC 4 の「インターネット アプリケーション」テンプレートを使用すると、OAuth/OpenId を使用した Facebook / Twitter / Google / Microsoft などのアカウントによる認証が可能となる。~
これらのアカウントによる認証を行う場合は、App_Start フォルダの AuthConfig クラスで設定を記述する。
--ActionResultで選択する場合、~
if文などを使用して、return View()の第二引数に設定する部分View名を切り替える。
public static void RegisterAuth()
{
OAuthWebSecurity.RegisterFacebookClient(
appId: "",
appSecret: "");
}
--RouteDataで選択する場合、以下のように実装する。
if ((HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString() == "Account")
&& (HttpContext.Current.Request.RequestContext.RouteData.Values["Action"].ToString() == "Login"))
{
Layout = "~/Views/Shared/_Layout2.cshtml";
}
else
{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Microsoft.Web.WebPages.OAuth.OAuthWebSecurity クラスには、各サービスに応じて、アカウント認証を行うためのメソッドが用意されている。
-参考
--Layout を変更する4種類の方法(ASP.NET MVC) - Jiro Laboratory~
http://jirolabo.hatenablog.com/entry/2014/12/06/211528
|RegisterFacebookClient|Facebook アカウントによる認証|
|RegisterGoogleClient|Google アカウントによる認証|
|RegisterLinkedInClient|LinkedIn アカウントによる認証|
|RegisterMicrosoftClient|Microsoft アカウントによる認証|
|RegisterTwitterClient|Twitter アカウントによる認証|
|RegisterYahooClient|Yahoo アカウントによる認証|
**BeginForm [#se7ba00c]
BeginFormには以下の2つのものがある。
***シングルページ アプリケーション [#i6c5037c]
単一ページで構成される Ajax アプリケーション。~
HTML5 / CSS や、各種 JavaScript ライブラリを使用することで、UX の向上、マルチデバイス対応が可能となる。~
シングルページ アプリケーションでは、クライアントサイドは各種 JavaScript ライブラリを使用してデータ操作を行い、サーバサイドは Web API を使用して RESTful にアクションメソッドを実行する。~
「シングル ページ アプリケーション」テンプレートを使用すると、既定で以下の JavaScript ライブラリが使用できる。
***Html.BeginFormの特徴 [#w59fdfea]
従来のASPなどでMVC方式を採用した場合と同じ、画面全体を再描画する仕組み。
|JavaScript ライブラリ|説明|
|jQuery|JavaScript のコーディングを支援するライブラリ|
|jQuery UI|jQuery をベースとした UI ライブラリ|
|jQuery Validate|HTML フォームの入力検証を行う jQuery プラグイン|
|knockout.js|JavaScript による MVVM (Model-View-ViewModel) フレームワーク|
|modernizr.js|HTML5/CSS のブラウザ対応状況を調査するためのライブラリ|
-リクエスト・レスポンスの度に、画面全体を再描画する。
-[[ViewState>ASP.NET ViewState]]相当の状態保存処理を独自実装する必要がある~
([[For付きのHtmlヘルパー(Html.xxxxFor)>#o7472bbe]]を使用する)。
*ASP.NET、ASP.NET MVC選択基準 [#o36003da]
どのような時に、ASP.NET MVCを採用するか?
***[[Ajax.BeginFormの特徴>部分描画とJavaScript#u74ece16]] [#mb6e9e4d]
-[[こちら>新アーキテクチャ設計ガイド補足(アプリケーション・アーキテクチャ)#ffda6117]]を参照
**@系 [#m101d9c7]
*[[ASP.NET MVCのアーキテクチャ]] [#v481d955]
ASP.NET MVCのアーキテクチャを理解する。
***@inherits [#ja5fd9e8]
[[@model>#e25a6847]]に置き換えられた。
*ファーストステップ [#y647af6b]
以下を消化することで学ぶことができる。
***@model [#e25a6847]
[[Viewスクリプトから強く型付けされたViewModelを参照する際に使用する。>#c1b6b351]]
-連載:ASP.NET MVC入門【バージョン3対応】~
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/index/index.html
--第1回 Controller-View開発のキモを押さえる~
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_02/aspnetmvc3_02_01.html
---1.ASP.NET MVC 3を利用するための準備/Hello, Worldアプリを作成
---2.コントローラ・クラスを作成する
---3.ビューを作成する/サンプルの実行/まとめ
***@section [#mb763834]
[[マスタページを利用する際、定義されたsectionを実装する。>#j06a55f0]]
-その他
***@helper [#n65f97a7]
Viewスクリプト内に[[Htmlヘルパー>#r27d7319]]を定義。
--ASP.NET MVC のチュートリアル~
http://msdn.microsoft.com/ja-jp/asp.net/ff630143.aspx
***Razor系 [#vbd5ff0e]
-コードナゲット(インライン式)~
式の値の出力
--通常のコードナゲット
@...
--明示的なコードナゲット
@(...)
--連載! コードで学ぶ ASP.NET MVC アプリケーション開発入門 Code Recipe MSDN~
http://msdn.microsoft.com/ja-jp/asp.net/gg490787
-コードブロック
--値の代入
--メソッド呼び出し
--オブジェクトの生成
@{...}
*参考 [#q9d096e2]
-制御構文(ネスト可能)~
if, switch, while, for/foreach
**連載:ASP.NET MVC入門 [#o959203d]
***バージョン1.0 [#jce05f61]
Insider.NET ASP.NET MVC入門 - @IT~
http://www.atmarkit.co.jp/ait/subtop/features/dotnet/aspnetmvc_index.html
--if
@if(...) {
・・・
}
else if {
・・・
}
else {
・・・
}
-第1回 ASP.NET MVCフレームワーク 基本のキ
--1.ASP.NET MVCとは?/ASP.NET MVCを利用するための準備
--2.Hello, Worldアプリケーションを作成する(1)
--3.Hello, Worldアプリケーションを作成する(2)
--4.ユーザー・パラメータを受け取る/アクション・メソッドでポスト・データの取得
--5.入力フォームに検証機能を追加する
--switch
@switch (i)
{
case 0:
・・・
break;
case 1:
・・・
break;
・・・
default:
・・・
break;
}
-第2回 スキャフォールディング機能で軽々DB連携アプリケーション
--1.Entity Dataモデルを作成/コントローラ・クラスを作成
--2.Indexアクション・メソッド&ビューを定義
--3.Detailsアクション・メソッド&ビューを定義/ビューの部品化
--4.Createアクション・メソッド&ビューを定義
--5.Editアクション・メソッド&ビューを定義
--while
@while (flg)
{
・・・
}
-第3回 ActionResultオブジェクトでアクション操作も自由自在
--1.ActionResultオブジェクトとは/ViewResult/RedirectToRouteResult
--2.ContentResultオブジェクト
--3.JsonResultオブジェクト
--4.artialViewResultオブジェクト
--5.JavaScriptResultオブジェクト/FileResultオブジェクト
--for
@for (var i = 0; i < 10; i++)
{
・・・
}
-第4回 フィルタ属性による認証/キャッシュ/セキュリティ対策の実装
--1.ページ・キャッシング機能を有効化する:OutputCache属性
--2.プリケーションに認証機能を追加したい:Authorize属性
--3.カスタム・エラー・ページを有効化する:HandleError属性
--4.HandleError属性のプロパティ
--5.妥当性を検証:ValidateInput属性/CSRF対策:ValidateAntiForgeryToken属性
--foreach
@foreach (var obj in list)
{
・・・
}
***バージョン3.0対応 [#pe325b3a]
連載:ASP.NET MVC入門【バージョン3対応】 - @IT~
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/index/
-静的コンテンツ化
--単一行
@:
--複数行
<text>・・・</text>
-第0回 Webアプリケーション・フレームワークの新たな選択肢
--1.ASP.NET概論
--2.いま、いずれのフレームワークを学ぶべきか
--3.WebフォームもASP.NET MVCも基盤は共通
-コメント
--サーバーコメント
@* ... *@
--HTMLコメント
<!-- ... -->
-第1回 Controller-View開発のキモを押さえる
--1.ASP.NET MVC 3を利用するための準備/Hello, Worldアプリを作成
--2.コントローラ・クラスを作成する
--3.ビューを作成する/サンプルの実行/まとめ
*フォルダ構成 [#c0d7785c]
**既定のフォルダ構成 [#zdede462]
ASP.NET MVC のテンプレートは、グルーピングを目的に、既定で以下のフォルダ構成となっている。~
それぞれのフォルダには、以下のようにファイルを配置することが推奨されている。
-第2回 Entity Frameworkコード・ファーストでモデル開発
--1.EF 4.1のインストール/モデル・オブジェクトを作成する
--2.コンテキスト・クラス/DB接続文字列の準備/イニシャライザ
--3.スキャフォールディング機能を利用しよう/サンプルの実行
|項番|フォルダ名|配置されるファイル|備考|h
|1|App_Start|起動時に、初期設定を行うモジュール|-|
|2|Contents|CSS|BundleConfig が使用しているため、既定の CSS ファイルは変更しない|
|3|Controllers|Controller|-|
|4|Models|Model|-|
|5|Scripts|JavaScript|BundleConfig が使用しているため、既定の JavaScript ファイルは変更しない|
|6|Views|View|対応する Controller 名のフォルダ以下に、View のファイルを配置する&br;例&br;Views\(コントローラー名)\Index.cshtml|
-第3回 モデル・バインドとアノテーション検証の実装
--1.データ登録の基本/Createアクション・メソッド/ビュー・スクリプト
--2.検証機能の実装/エンティティに検証ルールを追加
--3.ビュー・スクリプトでエラー・メッセージを表示
**Area (区分)による分割 [#re760150]
Area (区分) とは、ASP.NET MVC アプリケーションを論理的に分割する仕組みのことである。~
(ASP.NET MVC プロジェクトをシステム全体とすると、Area ごとにサブシステム (のようなもの) に分割できる。~
App_Start のマップルートが追加されるような感じ、と理解すると分かりやすいかもしれない)
-第4回 検証属性の自作とクラス・レベルのモデル検証
--1.自作の検証属性を定義する(サーバサイド編)
--2.自作の検証属性を定義する(クライアントサイド編)
--3.複数プロパティをまたがった検証を実装する
----
Tags: [[:.NET開発]], [[:ASP.NET]], [[:ASP.NET MVC]]
-第5回 新しいビュー・エンジン「Razor」の基本を理解しよう
--1.ASPXとの比較で理解するRazor文法(1)
--2.ASPXとの比較で理解するRazor文法(2)
--3.ビュー開発を効率化する「ビュー・ヘルパー」(1)
--4.ビュー開発を効率化する「ビュー・ヘルパー」(2)
-第6回 テンプレート機能でビュー開発を効率化
--1. モデルを自動認識する高機能なビュー・ヘルパー(DisplayFor/EditorFor)
--2. 独自の表示/編集テンプレートを準備/モデル単位にテンプレート適用
--3. ビュー・ヘルパーの自作/拡張メソッドとしてビュー・ヘルパーを定義
-第7回 レイアウト/部分ビューでアプリ共通のデザインを定義
--1.ヘッダ/フッタ/メニューを共通化する - レイアウト
--2.レイアウトに複数のコンテンツ領域を設置/レイアウトを入れ子に配置
--3.部分ビューの基本
--4.アクションを伴う部分ビュー呼び出し/子アクションでフラグメント・キャッシュ
-最終回 テスト自動化でアプリケーションの品質向上41.単体テストの基本を理解する
--1.単体テストの基本を理解する
--2.モック・ライブラリMoqの利用方法
--3.データベース・アクセスを伴うテスト(1)
--4.データベース・アクセスを伴うテスト(2)
*** [#j4edb29e]
-特集:ASP.NET 4.5新機能概説(3):ASP.NET MVCの新機能 (1-6) - @IT~
http://www.atmarkit.co.jp/ait/articles/1304/23/news056.html
-Insider.NET ASP.NET MVC入門 - @IT~
http://www.atmarkit.co.jp/ait/subtop/features/da/dt_aspnetmvc_index.html
-ASP.NET MVCフレームワーク 正式版 入門:CodeZine~
http://codezine.jp/article/corner/295
**MSDN [#of583417]
***ASP.NET デベロッパー センター [#k2e0a3d9]
-ASP.NET MVC~
http://msdn.microsoft.com/ja-jp/asp.net/aa336581.aspx
***ASP.NET および Visual Studio [#vf5d9e30]
http://msdn.microsoft.com/ja-jp/library/dd566231.aspx
-ASP.NET MVC 2~
http://msdn.microsoft.com/ja-jp/library/dd394709(v=vs.100).aspx
-ASP.NET MVC 3~
http://msdn.microsoft.com/ja-jp/library/gg416514(v=vs.98).aspx
-ASP.NET MVC 4 コンテンツ マップ~
http://msdn.microsoft.com/ja-jp/library/gg416514(v=vs.108).aspx