Using MVC with Kentico 8

26
MVC with Kentico 8 Thomas Robbins Radek Pribyl

description

The ASP.NET MVC Framework provides a powerful Model View Controller (MVC) approach to building web applications and provides separation of concerns, control over HTML output, intuitive URLs, and increased testability. We will start by looking at the -what and why of ASP.NET MVC. Then we will explore the various pieces of ASP.NET MVC including routes, controllers, actions, and views. If you are looking to get started with MVC then don’t miss this session.

Transcript of Using MVC with Kentico 8

Page 1: Using MVC with Kentico 8

MVC with Kentico 8Thomas Robbins

Radek Pribyl

Page 2: Using MVC with Kentico 8

Introduction to MVCThomas Robbins

[email protected]

Page 3: Using MVC with Kentico 8

A history lesson..

ASP.NET Web Form

A set of UI components (pages, buttons etc.) plus a stateful object oriented GUI programming model

.NET• A

multi-language managed code platform

The Strength of ASP.NET Web Forms • Making web development feel the

same as Windows Form development• No need to work with individual HTTP

requests and easier to think in terms of a stateful UI

Page 4: Using MVC with Kentico 8

Some problems with ASP.NET Web Forms

View state weight – Mechanism for maintaining state (view state) results in large blocks of data between client and serverPage life cycle – Connecting client side events with server side event handler code is complicated and delicateFalse sense of separation – ASP.NET web Forms code behind model provides a means to take application code out of HTML markup. Unfortunately, this allows for mix presentation models (manipulating a server side tree)Limited control over HTML – Server side controls render themselves as HTML but not always the HTML you wantLow testability – Nobody could have anticipated that automated testing would become essential

Not all bad – ASP.NET Web Forms provide a quick results and allows reasonably complex web applications to be built quickly!

Page 5: Using MVC with Kentico 8

What matters most…

Code reusability

• Shortens development• Code libraries• Design patterns• Frameworks

Separation of concerns

• Improves code clarity and organization

• Helps troubleshoot by isolating issues

• Allows for multiple teams to develop simultaneously

Application A Application B

Page 6: Using MVC with Kentico 8

What is MVC?

Model represents the data model• “Manages behavior and data of the

application domain”View represents the screen shown to the user• “Manages the graphical and/or textual

output to the portion of the bitmapped display that is allocated to the application”

Controller represents interaction from the user that changes the data and the view• “Interprets the mouse and keyboard

inputs from the user, commanding the model and/or the view to changes as appropriate”

Page 7: Using MVC with Kentico 8

MVC isn’t new!

Presented by Trygve Reenskaug in 1979First used in the Smalltalk-80 framework• Used in making Apple interfaces

(Lisa and Macintosh)

Page 8: Using MVC with Kentico 8

MVC Step by Step

Page 9: Using MVC with Kentico 8

Getting started with MVC 5

Page 10: Using MVC with Kentico 8

The project structure

• App_Data is the physical store for data. This folder has the same role as it does in ASP.NET web sites that use Web Form pages

• Content is the recommended location to add static content files like CSS and images

• Controllers is the recommended location for controllers. All controllers must end with “Controller”

• Models is provided for classes that represent the application model. This folder usually contains code that defines objects and logic for application with the data store

• Scripts is the recommended location for script files that support the application. By default this folder contains ASP.NET Ajax Foundation files and Jquery

• Views is the recommended location for views. These are ViewPage (.aspx), ViewUserControl (.ascx) and ViewMaster (.master) in additional to any other files needed for renderings. The view folder also contains a folder for each controller.

Page 11: Using MVC with Kentico 8

MVC

• Easier to Manage Complexity• Does not use view state or

server based forms• Rich Routing Structure• Support for Test-Driven

Development• Supports Large Teams Well

WebForms

• Preservers State over HTTP• Page Controller Pattern• View state or server based forms• Works well for small teams• Development is less complex

Everything has it’s advantages

Page 12: Using MVC with Kentico 8

MVC Routes

• A route is an object that parses a requested URL and it determines the controller and action to which the request is forwarded

• Routing operates on the directories and the file name of tin the relative URL

Uses the format/[Controller]/[ActionName]/[Parameters]

Page 13: Using MVC with Kentico 8

What’s the route

Matching a URL request to a route depends on all of the following conditions:• The route patterns that you have defined or the default route patterns, if any, that are

included in your project type.• The order in which you added them to the Routes collection.• Any default values that you have provided for a route.• Any constraints that you have provided for a route.• Whether you have defined routing to handle requests that match a physical file.

Page 14: Using MVC with Kentico 8

MVC in Kentico 8Radek Pribyl

(Technical leader - Portal engine, MVC)

Page 15: Using MVC with Kentico 8

Installation

Requirements• .NET Framework 4.5/4.5.1• Project type – Web application

Configuration• None

MVC version• MVC4 included in the Kentico 8 installation

Page 16: Using MVC with Kentico 8

Architecture

Kentico as a content platform• Data stored in documents and custom

tables

MVC renders live site• Controller, Views – custom implementation• Manual routing management

recommended

MVC handler

Request

Live site(MVC)

ASPX handler

CMS Core

Kentico Admin(Web forms)

HTML…

Page 17: Using MVC with Kentico 8

Web application sructure

CMSApp• Standard Kentico web application project (Web forms)

CMSApp_AppCode• Contains all the files which you would place into the ASP.NET

folder Old_App_Code (or App_Code in Web site project)

CMSApp_MVC• MVC4 web application project• Standard Kentico module – registered in the Kentico application

=> uses API handlers• Simplifies development• All the MVC related files belong here• NewsController + Views examples – used in the Corporate

sample site

Page 18: Using MVC with Kentico 8

CMSApp_MVC project

App_Start• Standard MVC project folder• RouteConfig.cs• FilterConfig.cs

CMS_MvcModule• Connects the project (module) to the Kentico

application

Controllers• Custom controllers• Sample controller

Models• Custom model classes

Views• Custom views• Sample views

Page 19: Using MVC with Kentico 8

Development tips #1

Architecture• Kentico as a content platform• Live site generated by MVC

Controllers• Try out new DocumentQuery API• Implement cachingo MVC cachingo Kentico caching

• When using view location that support Kentico export, return full path of views

Models• Use Kentico API classes (info objects)• Is using data containers (TreeNode), create a simplified model class => strongly typed views

Page 20: Using MVC with Kentico 8

Development tips #2

Views• View engines – no restrictions• Razor recommended

Routes• Route registrationo App_Start/RouteConfig.cs – manual exporto Attribute routing

• Avoid using route placeholders at the start of the route: {controller}/{action}/{id}• Especially when using together with extension-less• Otherwise use the following route restrictions (solves most of the future possible conflicts with system

URLs)routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});routes.IgnoreRoute("{*allashx}", new { allashx = @".*\.ashx(/.*)?" });

• To improve performance, exclude the URLs defined by your routes from the Kentico rewriting engine

Page 21: Using MVC with Kentico 8

Example

Controller• Data - DocumentQuery• No caching• Locationo Controllers/MvcSampleSite/NewsController.cs

Model• News document model• Locationo MvcSampleSite/Model/NewsModel.cs

View• Strongly typed view• Using a layout page• Locationo Views/MvcSampleSite/*

Routes• Registered news list + news detail routeso / - news listo /news/<newsalias> - news detail

• Locationo App_Start/RouteConfig.cs

Page 22: Using MVC with Kentico 8

MVC limitations

MVC Views• No web parts• No CMS controls• Document permissions need to be checked manually

Web parts• No MVC views

Web forms(web parts) MVC

Page 23: Using MVC with Kentico 8

Export/Import

Export

Site objects• Controllers/<siteName>/*• Views/<siteName>/*• <siteName>/*

Global objects• Controllers/Global/*• Views/Global/*

Import

• Manually include files into CMSApp_MVC • Build CMSApp_MVC

Page 24: Using MVC with Kentico 8

MVC upgrade

MVC Upgrade

Remove MVC4 libraries (Lib/MVC/)

NuGet package• Recommended• Easier option• Only latest MVC version

Manual MVC upgrade• More complicated• Specific MVC version

Update Kentico MVC libraryUpdate Views/web.config

Rebuild CMSApp_MVC

Page 25: Using MVC with Kentico 8

Resources

Kentico MVChttps://docs.kentico.com/x/qYFG

Upgrade MVChttps://docs.kentico.com/x/UgBcAw

API exampleshttps://docs.kentico.com/x/VABcAw

Document APIhttps://docs.kentico.com/x/5oAbAg

Page 26: Using MVC with Kentico 8