「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[リリース情報]]
--[[機能一覧 - 共通部品群]]

*目次 [#j12868f0]
#contents

*概要 [#xc7b824c]
現時点のMVCチュートリアルは、

-Tutorial_MVC_CSharp.ja · OpenTouryoProject/OpenTouryo Wiki~
https://github.com/OpenTouryoProject/OpenTouryo/wiki/Tutorial_MVC_CSharp.ja

--EntityにDataSet、DataTableを使用している。
--そのため、Model Binding + DataAnnotationを使用していない。

と言った、少々、古いスタイルの実装となっています。

*チュートリアルの変更点 [#pcad8acc]
以下の様に、最近の一般的な実装に変更可能です。

-Model Binding + DataAnnotation の MVVMスタイルに変更します。

-変更内容は、下記のそれぞれのディレクトリのDiffを確認して下さい。
--MVC_Sample_20181003
--MVC_Sample_20181003_poco
--MVC_Sample_20190627_mvvm

**オリジナルのチュートリアル [#e1e2bb95]
チュートリアルを遂行して出来上がったサンプル

-https://github.com/daisukenishino2/SupportOpenTouryopPJ/tree/master/Tutorials/programs/CS/Samples/WebApp_sample/MVC_Sample_20181003

**EntityのPOCO化 [#ecc1b3c0]
[[POCO変換部品>機能一覧 - 共通部品群#r9af4f09]]を使用して、DataSet、DataTableのEntityをPOCO化可能です。

-https://github.com/daisukenishino2/SupportOpenTouryopPJ/blob/master/Tutorials/programs/CS/Samples/WebApp_sample/MVC_Sample_20181003_poco/

**Model Bindingの利用 [#x8c165a1]
[[EntityのPOCO化>#ecc1b3c0]]を行った後に、[[Model Binding>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E7%94%A8%E8%AA%9E#t62a5795]]を行うよう、コードを変更可能です。

-https://github.com/daisukenishino2/SupportOpenTouryopPJ/tree/master/Tutorials/programs/CS/Samples/WebApp_sample/MVC_Sample_20190627_mvvm/

※ なお、ViewModelに[[DataAnnotation>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95#yb8830b1]]することで、単項目チェックも自動化可能です。~
 これについては、[[コチラ>https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/ViewModels/AccountLoginViewModel.cs]]のViewModelガチ実装が参考になります。

*Model Binding + DataAnnotation [#e74d877e]

**[[Model Binding>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E7%94%A8%E8%AA%9E#t62a5795]] [#wfc59249]

***単方向と双方向バインディング [#h6ebec1a]
-単方向バインディングは、単に、
--クライアントから送信されてきたデータのキー名と、~
--ControllerのAction Methodの引数名とが一致するキー値を

>探して、バインドすると言う機能。

-双方向バインディングを使用して、~
Viewにバインドて、ViewからControllerにPOSTすると、~
Web FormsのPostBackのような動作を容易に実装可能。

***双方向バインディングの実装方法 [#f410f9f3]
-ViewModelを定義する。
-これをControllerからViewに渡して、Html.xxxxForでバインド。
-Viewから、ControllerへのPOSTをViewModelで受ける。

**DataAnnotation [#g1ab409f]
また、以下のようにViewModelを定義すれば~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/ViewModels/ManageAddSaml2OAuth2DataViewModel.cs

-単項目チェックや
-ラベル表示(国際化対応)も

属性(アノテーション)によって、容易に実装可能。

*Controller作成の単位 [#e5deb391]

基本的には、「[[モジュール化の要約>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95#j2c8410a]]」にあるように、

-[[全体View ごとに Controller を作成する方式>#mc8cb5e9]]
-[[機能やデータ構造に対して 1 つの Controller を対応させる方式>#kfe296c6]]
-[[画面単位(全体View ごとに Controller を作成する方式>#mc8cb5e9]]
-[[機能、CRUD単位(機能やデータ構造に対して 1 つの Controller を対応させる方式>#kfe296c6]]

がある。[[オリジナルのチュートリアル>#e1e2bb95]]では、後者を採用している。

**画面単位 [#mc8cb5e9]
-Web Formsと同じで解り易い。
-大規模ではコチラが適合する。

**機能、CRUD単位 [#kfe296c6]
以下の場合は、コチラ。
-複雑な画面を開発する。
-スキャフォールディングで画面を開発する。

*参考 [#r2c9efe8]

**[[MVCチュートリアルの改修項目]] [#vc091f0b]

**マイクロソフト系技術情報 Wiki [#b1b0ea1e]
-ASP.NET MVC~
https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC
--ASP.NET MVCの用語~
https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E7%94%A8%E8%AA%9E
--ASP.NET MVCの利用方法~
https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95

IP:202.246.252.97 TIME:"2019-07-01 (月) 12:42:24" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=MVC%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%AEPOCO%E5%AF%BE%E5%BF%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6" USER_AGENT:"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS