N 2 MS Mvc Examples学習記録(3)–コントローラ類

8532 ワード

全部で5つのコントローラがあります.
1. ContentCotroller
 1: [Controls(typeof(AbstractPage))]
 2: public class ContentController : ContentController
 3: {
 4: }

Controlsプロパティは、コントローラがどのタイプのコンテンツアイテム(モデル)を使用するかを指定します.ここではContentPageではなくAbstractPageを指定し、いずれかのコンテンツアイテムを使用できることを示しますが、一部のコンテンツアイテムにはすでに対応するコントローラがあり、対応するコントローラがないコンテンツアイテムだけがこのコントローラで使用されます.
また,コントローラの親クラスがContentControllerとして指定されていることが分かるが,これはN 2で定義されたコントローラクラスであり,このクラスではIndexメソッド(仮想メソッド)が実装されており,通常のコンテンツ項目で十分であるため,ここでは書き換える必要はない.
2. NewsController
 1: [Controls(typeof(NewsPage))]
 2: public class NewsController : ContentController
 3: {
 4: public override ActionResult Index()
 5: {
 6: var vd = new NewsViewData
 7: {
 8: News = CurrentItem,
 9: Back = CurrentItem.Parent,
 10: Comments = CurrentItem.GetComments()
 11: };
 12: return View("index", vd);
 13: }
 14: 
 15: public ActionResult Comment()
 16: {
 17: return View("Comment", CurrentItem);
 18: }
 19: 
 20: public ActionResult Submit(string title, string text)
 21: {
 22: CommentItem comment = Engine.Definitions.CreateInstance(CurrentItem);
 23: comment.Title = Server.HtmlEncode(title);
 24: comment.Text = Server.HtmlEncode(text);
 25: Engine.Persister.Save(comment);
 26: 
 27: return RedirectToAction("index");
 28: }
 29: }

ニュースコンテンツとそのコメントコンテンツのすべてのリクエストと処理を制御します.これには、ニュースとそのすべてのコメントの取得、コメントフォームの追加、コメントの送信などが含まれます.ここではNewsViewDataクラスが使用されていることに注意してください.これはビューデータクラスで、ニュースに必要な自分を含む必要な情報を提供しています.このクラスは次の編でコードを見ることができます.
Indexメソッドは、ここで書き換えられています.ニュースコンテンツを表示する際には、このニュースに対するすべてのコメントや、後でどこに退くかなどの補助コンテンツを表示する必要があるため、これらのデータを格納し、ビューにバインドするために専用のNewsViewDataクラスを別途定義しています.
CommentメソッドはGETリクエストに応答し,コメントを追加するビューをブラウザに戻し,ユーザがコメントを入力できるようにする.
SubmitメソッドはPOSTリクエストに応答し、コメントオブジェクトの作成と永続化を担当します.Engine.Definitions.CreateInstance(CurrentItem)の役割は、現在のニュースコンテンツ項目のサブノードにコメント項目オブジェクトを追加し、タイトルとテキストを設定した後、Engine.Persister.Save()メソッドは,このコメントをデータソースに永続化する.最後にニュースページに戻ります.
ここではEngineオブジェクトをよく検討する必要があります.N 2を管理するために必要な機能を多く提供しています.今後CMSを深くカスタマイズする場合は、必ず使用します.
3. NewsContainerController
 1: [Controls(typeof(NewsContainer))]
 2: public class NewsContainerController : ContentController
 3: {
 4: public override ActionResult Index()
 5: {
 6: return View("Index", new NewsContainerViewData { Container = CurrentItem, News = CurrentItem.GetNews()});
 7: }
 8: 
 9: public ActionResult JsonList()
 10: {
 11: var news = CurrentItem.GetNews().Select(n => new { n.Title, n.Url });
 12: return Json(news);
 13: }
 14: }

このコントローラの役割は、すべてのニュースを取得し、ニュースコンテナビューに伝えることです.ここでは、ニュースコンテナアイテムとすべてのニュースリストを格納するビューデータクラス、NewsContainerViewDataも使用されます.
ここではJsonListメソッドも定義し、JSON形式のニュースリストを返しますが、どこで使うか分かりません.
4. TextPartController
 1: [Controls(typeof(Models.TextPart))]
 2: public class TextPartController : ContentController
 3: {
 4: public override ActionResult Index()
 5: {
 6: return View(CurrentItem);
 7: }
 8: }

ここでは何も言うことはありませんが、Indexは書き直す必要はないと思います.親のIndexメソッドはこのように書かれているからです.
5. StaticController
コードは貼る必要はありません.このクラスはN 2のコードを使っていません.VSで新しく作ったMVCプロジェクトのHomeControllerで変更したようです.N 2の制御を受けず、N 2の管理インタフェースにも現れないが、N 2と共存することができる.