SlideShare a Scribd company logo
ASP.NET MVCÖNSEL AKIN
Controllers & Actions
ControllersResponsible for controlling the flow of applicationExposes public methods as actionsEach action returns different results typesInherits from System.Web.Mvc.Controller
Returning Action ResultsViewResult			View()PartialViewResult		PartialView()RedirectResult			Redirect()ContentResult			Content()JsonResult			Json()FileResult			File()EmptyResult			HttpUnauthorizedResultJavaScriptResult		JavaScript()RedirectToRouteResult	RedirectToRoute()
Returning View ResultsReturns HTML to the browserImplicit vs Explicit view namingreturn View();return View(‘’ViewName’’)Specifying pathsreturn View(‘’SubFolder/ViewName’’)return View(‘’~/View.aspx’’)
Returning Redirect ResultsSame controllerreturn RedirectToAction(‘’Index’’);Different controllerreturn RedirectToAction(‘’Product’’, ‘’List’’);Providing route valuesreturn RedirectToAction(‘’Product’’, ‘’Details’, new { id = 20 });
Returning Content Resultsreturn Content(‘’Hello’’);Returning .Net typespublic string HelloAction() {return ‘’Hello’’;}ToString() and wrapping with ContentResult
Returning Json ResultsReturns result in JavaScript Object Notation (JSON) formatUses JavaScriptSerializer{ id: 10, name: ‘SharePoint 2010’, authors: [{ ‘onsela’, ‘mehmeta’ }]}var books = new List<Book>();return Json(books);
Returning JavaScriptpublic ActionResult ShowMessage() {return JavaScript(‘’alert(‘Message!’);’’);}// View.aspx<%: Ajax.ActionLink(‘’Show message’’, ‘’ShowMessage’’, null) %>
Accessing Request Information
Action Method Parameters – 1public ActionResult ShowInfo(string city) {	// Equivalent tovar tempCity = Request.Form[‘’city’’];}Optional ParametersNullable typesDefaultValueAttributeOptional Parameters with C# 4.0Complex Parameterspublic ActionResult Update(Product p) { .... }
Action Method Parameters – 2Invoking model binding manuallypublic ActionResult Update(int productID) {var product = repository.Get(productID);UpdateModel(product);repository.Update(product);return View(product);}
Passing Data to Views – 1Controllers and views are totally independentControllers suply data to viewsNo way to access controllers from viewsSupplying data from a controllerViewData[‘’product’’] = productObject;Accessing data from the view<%: ((Product)ViewData[‘’product’’]).Name %>
Passing Data to Views – 2Sending strongly typed objects to viewspublic ActionResult ProductInfo(int id) {var product = repository.Get(id);return View(product);}// View.aspxProduct Name: <%: Model.Name %>
Passing Data to Views – 3Passing dynamic objects to viewspublic ActionResult ProductDetails(int id) {dynamic model = new ExpandoObject();model.Product = repository.Get(id);model.Message = ‘’Out of Stock’;return View(model);}// View.aspx<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>Product: <%: Model.Product.Name %>Message: <%: Model.Message %>
Using TempDataSimilar usage with ViewDataPreserves data across redirectionspublic ActionResult Update(Product product) {repository.Update(product);TempData[‘’message’’] = ‘’Product ‘’ + product.Name + ‘’ updated.’’;return RedirectToAction(‘’Success’’);}// Success action view.aspx<% if (TempData[‘’message’’] != null) %><p><%: TempData[‘’message’’] %></p><% } %>
Using FiltersInjects extra behaviors to controller and actionsDerive from FilterAttribute classBasic types of filters
Applying Filters[Authorize(Roles=‘’Administrator’’)]public class ProductController : Controller {	[OutputCache(Duration=30)]public ActionResult Save(Product p) {}}
How Filters are Executedtry{Run each IAuthorizationFilter'sOnAuthorization() methodif(none of the IAuthorizationFilters cancelled execution)	{Run each IActionFilter'sOnActionExecuting() method		Run the action methodRun each IActionFilter'sOnActionExecuted() method (in reverse order)Run each IResultFilter'sOnResultExecuting() method		Run the action resultRun each IResultFilter'sOnResultExecuted() method (in reverse order)	}	else	{Run any action result set by the authorization filters	}}catch(exception not handled by any action or result filter){Run each IExceptionFilter'sOnException() methodRun any action result set by the exception filters}
IActionFilter, IResultFilter Methods
Authorize FilterRun early in the requestUsers propertyRoles propertyOrder property[Authorize(Roles=‘’SalesRep’’, Users=‘’onsela’’)]public ActionResult ProductList() {	return View();}
HandleError FilterDetects exceptionsRenders a specific viewReturns HTTP status code 500 to clients[HandleError(View=‘’ErrorPage’’, 	ExceptionType=typeof(SqlException)]public ActionResult ProductList() {	return View();}
OutputCache Filter
Handling Unknown Actionspublic class HomeController : Controller{	protected override void HandleUnknownAction(string 		actionName)	{		.....	}}
Ad

More Related Content

What's hot (20)

Sessi
SessiSessi
Sessi
Asif Atick
 
Part 26 login type2 using binding source count
Part 26 login type2 using binding source countPart 26 login type2 using binding source count
Part 26 login type2 using binding source count
Girija Muscut
 
React outbox
React outboxReact outbox
React outbox
Angela Lehru
 
Unidirectional Data Flow in Swift
Unidirectional Data Flow in SwiftUnidirectional Data Flow in Swift
Unidirectional Data Flow in Swift
Jason Larsen
 
Sharing Data Between Angular Components
Sharing Data Between Angular ComponentsSharing Data Between Angular Components
Sharing Data Between Angular Components
Squash Apps Pvt Ltd
 
React & Redux
React & ReduxReact & Redux
React & Redux
Federico Bond
 
Dmytro Zaitsev Viper: make your mvp cleaner
Dmytro Zaitsev Viper: make your mvp cleanerDmytro Zaitsev Viper: make your mvp cleaner
Dmytro Zaitsev Viper: make your mvp cleaner
Аліна Шепшелей
 
Aspnet Life Cycles Events
Aspnet Life Cycles EventsAspnet Life Cycles Events
Aspnet Life Cycles Events
LiquidHub
 
Introduction to react and redux
Introduction to react and reduxIntroduction to react and redux
Introduction to react and redux
Cuong Ho
 
Redux training
Redux trainingRedux training
Redux training
dasersoft
 
Web technology javascript
Web technology   javascriptWeb technology   javascript
Web technology javascript
Uma mohan
 
React state managmenet with Redux
React state managmenet with ReduxReact state managmenet with Redux
React state managmenet with Redux
Vedran Blaženka
 
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
Inhacking
 
React / Redux Architectures
React / Redux ArchitecturesReact / Redux Architectures
React / Redux Architectures
Vinícius Ribeiro
 
SUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVCSUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVC
mikeedwards83
 
Lesson 05 Data Binding in WPF
Lesson 05 Data Binding in WPFLesson 05 Data Binding in WPF
Lesson 05 Data Binding in WPF
Quang Nguyễn Bá
 
React JS and Redux
React JS and ReduxReact JS and Redux
React JS and Redux
Glib Kechyn
 
Lesson 06 Styles and Templates in WPF
Lesson 06 Styles and Templates in WPFLesson 06 Styles and Templates in WPF
Lesson 06 Styles and Templates in WPF
Quang Nguyễn Bá
 
Intention Oriented Model Interaction
Intention Oriented Model InteractionIntention Oriented Model Interaction
Intention Oriented Model Interaction
Yasir Karam
 
10 01 containersbindings
10 01 containersbindings10 01 containersbindings
10 01 containersbindings
tflung
 
Part 26 login type2 using binding source count
Part 26 login type2 using binding source countPart 26 login type2 using binding source count
Part 26 login type2 using binding source count
Girija Muscut
 
Unidirectional Data Flow in Swift
Unidirectional Data Flow in SwiftUnidirectional Data Flow in Swift
Unidirectional Data Flow in Swift
Jason Larsen
 
Sharing Data Between Angular Components
Sharing Data Between Angular ComponentsSharing Data Between Angular Components
Sharing Data Between Angular Components
Squash Apps Pvt Ltd
 
Aspnet Life Cycles Events
Aspnet Life Cycles EventsAspnet Life Cycles Events
Aspnet Life Cycles Events
LiquidHub
 
Introduction to react and redux
Introduction to react and reduxIntroduction to react and redux
Introduction to react and redux
Cuong Ho
 
Redux training
Redux trainingRedux training
Redux training
dasersoft
 
Web technology javascript
Web technology   javascriptWeb technology   javascript
Web technology javascript
Uma mohan
 
React state managmenet with Redux
React state managmenet with ReduxReact state managmenet with Redux
React state managmenet with Redux
Vedran Blaženka
 
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
Inhacking
 
SUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVCSUGCon 2014 Sitecore MVC
SUGCon 2014 Sitecore MVC
mikeedwards83
 
React JS and Redux
React JS and ReduxReact JS and Redux
React JS and Redux
Glib Kechyn
 
Lesson 06 Styles and Templates in WPF
Lesson 06 Styles and Templates in WPFLesson 06 Styles and Templates in WPF
Lesson 06 Styles and Templates in WPF
Quang Nguyễn Bá
 
Intention Oriented Model Interaction
Intention Oriented Model InteractionIntention Oriented Model Interaction
Intention Oriented Model Interaction
Yasir Karam
 
10 01 containersbindings
10 01 containersbindings10 01 containersbindings
10 01 containersbindings
tflung
 

Similar to ASP.NET MVC Controllers & Actions (20)

ASP .net MVC
ASP .net MVCASP .net MVC
ASP .net MVC
Divya Sharma
 
springwebmvc-1234567891236547894463621.pdf
springwebmvc-1234567891236547894463621.pdfspringwebmvc-1234567891236547894463621.pdf
springwebmvc-1234567891236547894463621.pdf
Patiento Del Mar
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
zeeshanhanif
 
Asp.Net Mvc
Asp.Net MvcAsp.Net Mvc
Asp.Net Mvc
micham
 
Developing ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller PatternDeveloping ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller Pattern
goodfriday
 
Murach: How to transfer data from controllers
Murach: How to transfer data from controllersMurach: How to transfer data from controllers
Murach: How to transfer data from controllers
MahmoudOHassouna
 
Simple mvc4 prepared by gigin krishnan
Simple mvc4 prepared by gigin krishnanSimple mvc4 prepared by gigin krishnan
Simple mvc4 prepared by gigin krishnan
Gigin Krishnan
 
Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)
Ruud van Falier
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
erdemergin
 
Chapter4.pptx
Chapter4.pptxChapter4.pptx
Chapter4.pptx
narendrakumar406336
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
nagarajupatangay
 
Building Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel AppelBuilding Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel Appel
.NET Conf UY
 
MVC Training Part 1
MVC Training Part 1MVC Training Part 1
MVC Training Part 1
Lee Englestone
 
Jsf intro
Jsf introJsf intro
Jsf intro
vantinhkhuc
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
Guy Nir
 
Using a model view-view model architecture for iOS apps
Using a model view-view model architecture for iOS appsUsing a model view-view model architecture for iOS apps
Using a model view-view model architecture for iOS apps
allanh0526
 
Java Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAXJava Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAX
IMC Institute
 
Backbone js
Backbone jsBackbone js
Backbone js
Rohan Chandane
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
Bozhidar Bozhanov
 
AngularJs-training
AngularJs-trainingAngularJs-training
AngularJs-training
Pratchaya Suputsopon
 
springwebmvc-1234567891236547894463621.pdf
springwebmvc-1234567891236547894463621.pdfspringwebmvc-1234567891236547894463621.pdf
springwebmvc-1234567891236547894463621.pdf
Patiento Del Mar
 
Asp.Net Mvc
Asp.Net MvcAsp.Net Mvc
Asp.Net Mvc
micham
 
Developing ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller PatternDeveloping ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller Pattern
goodfriday
 
Murach: How to transfer data from controllers
Murach: How to transfer data from controllersMurach: How to transfer data from controllers
Murach: How to transfer data from controllers
MahmoudOHassouna
 
Simple mvc4 prepared by gigin krishnan
Simple mvc4 prepared by gigin krishnanSimple mvc4 prepared by gigin krishnan
Simple mvc4 prepared by gigin krishnan
Gigin Krishnan
 
Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)
Ruud van Falier
 
Building Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel AppelBuilding Modern Websites with ASP.NET by Rachel Appel
Building Modern Websites with ASP.NET by Rachel Appel
.NET Conf UY
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
Guy Nir
 
Using a model view-view model architecture for iOS apps
Using a model view-view model architecture for iOS appsUsing a model view-view model architecture for iOS apps
Using a model view-view model architecture for iOS apps
allanh0526
 
Java Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAXJava Web Programming [8/9] : JSF and AJAX
Java Web Programming [8/9] : JSF and AJAX
IMC Institute
 
Ad

ASP.NET MVC Controllers & Actions

  • 3. ControllersResponsible for controlling the flow of applicationExposes public methods as actionsEach action returns different results typesInherits from System.Web.Mvc.Controller
  • 5. Returning View ResultsReturns HTML to the browserImplicit vs Explicit view namingreturn View();return View(‘’ViewName’’)Specifying pathsreturn View(‘’SubFolder/ViewName’’)return View(‘’~/View.aspx’’)
  • 6. Returning Redirect ResultsSame controllerreturn RedirectToAction(‘’Index’’);Different controllerreturn RedirectToAction(‘’Product’’, ‘’List’’);Providing route valuesreturn RedirectToAction(‘’Product’’, ‘’Details’, new { id = 20 });
  • 7. Returning Content Resultsreturn Content(‘’Hello’’);Returning .Net typespublic string HelloAction() {return ‘’Hello’’;}ToString() and wrapping with ContentResult
  • 8. Returning Json ResultsReturns result in JavaScript Object Notation (JSON) formatUses JavaScriptSerializer{ id: 10, name: ‘SharePoint 2010’, authors: [{ ‘onsela’, ‘mehmeta’ }]}var books = new List<Book>();return Json(books);
  • 9. Returning JavaScriptpublic ActionResult ShowMessage() {return JavaScript(‘’alert(‘Message!’);’’);}// View.aspx<%: Ajax.ActionLink(‘’Show message’’, ‘’ShowMessage’’, null) %>
  • 11. Action Method Parameters – 1public ActionResult ShowInfo(string city) { // Equivalent tovar tempCity = Request.Form[‘’city’’];}Optional ParametersNullable typesDefaultValueAttributeOptional Parameters with C# 4.0Complex Parameterspublic ActionResult Update(Product p) { .... }
  • 12. Action Method Parameters – 2Invoking model binding manuallypublic ActionResult Update(int productID) {var product = repository.Get(productID);UpdateModel(product);repository.Update(product);return View(product);}
  • 13. Passing Data to Views – 1Controllers and views are totally independentControllers suply data to viewsNo way to access controllers from viewsSupplying data from a controllerViewData[‘’product’’] = productObject;Accessing data from the view<%: ((Product)ViewData[‘’product’’]).Name %>
  • 14. Passing Data to Views – 2Sending strongly typed objects to viewspublic ActionResult ProductInfo(int id) {var product = repository.Get(id);return View(product);}// View.aspxProduct Name: <%: Model.Name %>
  • 15. Passing Data to Views – 3Passing dynamic objects to viewspublic ActionResult ProductDetails(int id) {dynamic model = new ExpandoObject();model.Product = repository.Get(id);model.Message = ‘’Out of Stock’;return View(model);}// View.aspx<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>Product: <%: Model.Product.Name %>Message: <%: Model.Message %>
  • 16. Using TempDataSimilar usage with ViewDataPreserves data across redirectionspublic ActionResult Update(Product product) {repository.Update(product);TempData[‘’message’’] = ‘’Product ‘’ + product.Name + ‘’ updated.’’;return RedirectToAction(‘’Success’’);}// Success action view.aspx<% if (TempData[‘’message’’] != null) %><p><%: TempData[‘’message’’] %></p><% } %>
  • 17. Using FiltersInjects extra behaviors to controller and actionsDerive from FilterAttribute classBasic types of filters
  • 18. Applying Filters[Authorize(Roles=‘’Administrator’’)]public class ProductController : Controller { [OutputCache(Duration=30)]public ActionResult Save(Product p) {}}
  • 19. How Filters are Executedtry{Run each IAuthorizationFilter'sOnAuthorization() methodif(none of the IAuthorizationFilters cancelled execution) {Run each IActionFilter'sOnActionExecuting() method Run the action methodRun each IActionFilter'sOnActionExecuted() method (in reverse order)Run each IResultFilter'sOnResultExecuting() method Run the action resultRun each IResultFilter'sOnResultExecuted() method (in reverse order) } else {Run any action result set by the authorization filters }}catch(exception not handled by any action or result filter){Run each IExceptionFilter'sOnException() methodRun any action result set by the exception filters}
  • 21. Authorize FilterRun early in the requestUsers propertyRoles propertyOrder property[Authorize(Roles=‘’SalesRep’’, Users=‘’onsela’’)]public ActionResult ProductList() { return View();}
  • 22. HandleError FilterDetects exceptionsRenders a specific viewReturns HTTP status code 500 to clients[HandleError(View=‘’ErrorPage’’, ExceptionType=typeof(SqlException)]public ActionResult ProductList() { return View();}
  • 24. Handling Unknown Actionspublic class HomeController : Controller{ protected override void HandleUnknownAction(string actionName) { ..... }}