My Cart (0)

Customer Service 1-800-221-5528

Murach’s ASP.NET Core MVC

by Mary Delamater and Joel Murach
17 chapters, 760 pages, 330 figures
Published January 2020
ISBN 978-1-943872-49-7
Print: $59.50
eBook: $54.50
Print + eBook: $72.00

If you understand HTML/CSS and C#, you’re ready to learn how to develop ASP.NET Core MVC apps with our latest web programming book.

  • This book gets you off to a fast start whether or not you have prior experience with server-side development.
  • It teaches you all the skills you need to develop bulletproof, database-driven web apps. That includes using endpoint routing, Razor views, model binding, data validation, dependency injection, Bootstrap for responsive design, EF (Entity Framework) Core for database handling, xUnit and Moq for unit testing, and Identity for authentication.
  • When you’re done, this book does double duty as the best on-the-job reference that money can buy.

 

College Instructors

Go to our instructor’s site to learn more about this book and its instructor’s materials.

 

Your books have always been my go-to source because they're perfectly suited to my no-time-to-waste schedule and ADD learning style—they're modular, clean, and hit all the major points without any fluff. I know that by the time I finish, I'll feel very comfortable with proceeding on a live assignment.”

Jeff Madrak, Independent Software Developer

  • About this Book
  • Table of Contents
  • FREE Downloads
  • Book FAQs
  • Corrections
  • Reviews

What this book does

Section 1: Get off to a fast start

To get you started fast, this 5-chapter section shows how to use Visual Studio to design, code, and test multi-page ASP.NET Core apps that use the MVC pattern, work with a database, and use Bootstrap to make the apps look great on all screen sizes. After that, you’re ready to review and expand upon this section to raise your skills up to a professional level.


Section 2: Master the essential skills

This 8-chapter section presents the ASP.NET Core MVC skills you’ll use every day:

  • Use endpoint routing to provide user-friendly URLs that can improve SEO
  • Use Razor views and layouts to display the user interface
  • Transfer data between controllers and views
  • Use session state and cookies to maintain state
  • Use model binding to simplify your code
  • Validate data on the client and the server
  • Use EF (Entity Framework) Core to work with a database using Code First or Database First development
  • Study an extensive, real-world website that shows how all the skills in this section work together

Section 3: Add more skills as you need them

This 4-chapter section presents skills that will take your web development skills to the next level:

  • Use dependency injection (DI) to make your code more flexible and easier to test
  • Use xUnit and Moq to automate the testing of your apps
  • Use tag helpers, partial views, and view components to reduce code duplication in your views
  • Use authorization to secure parts of your website
  • Use ASP.NET Core Identity to authenticate users
  • Use a text editor named Visual Studio Code, an increasingly popular alternative to the Visual Studio IDE

Who this book is for

This book is for anyone who knows the basics of HTML/CSS and C# and wants to learn how to use the ASP.NET Core platform to develop MVC web apps. That’s true whether you’re new to web development or whether you have experience with another web development platform.

What software you need

To program using this book, you can install Visual Studio with the .NET Core workload as described in appendix A (Windows) or B (macOS). On Windows, this installs all the software you need, including:

  • Visual Studio
  • .NET Core 3.1
  • support for C# 8.0
  • a web server called Kestrel
  • a database server called SQL Server Express LocalDB

On macOS, installing Visual Studio installs all of the software you need, except SQL Server Express LocalDB. Since LocalDB isn’t supported on macOS, we recommend using SQLite instead as described in appendix B.

Companion book

The first 8 chapters of Murach’s HTML5 and CSS3 present the HTML and CSS skills that you need as a prerequisite to developing ASP.NET Core MVC web apps. 

This book works for beginners as well as professionals. It lets you learn new skills whenever you need them. And it's the best on-the-job reference book that money can buy.

What people have said about previous Murach books

“This book enabled me to write custom websites for customers, which is exactly what I wanted it to do. No previous book did such an excellent job of demonstrating how to handle security and database classes.”
 - Charles Profitt, Developer, New York

"I purchased several ASP.NET books but didn’t really learn it until I purchased this one."
 - J.R., Enterprise Developer, Florida

“Another awesome book from Murach. Their format makes learning new material easier, and their code examples WORK.”
 - Posted at an online bookseller

“Tried Udemy, Udacity, some other video and printed tutorials, but didn’t get the feel of it. Murach's side-by-side lecture & example format really works for me. Really effective training style.”
 - Posted at an online bookseller

"Another thing I like is the exercises at the end of each chapter. They’re a great way to reinforce the main points of each chapter and force you to get your hands dirty."
 - Hien Luu, SD Forum/Java SIG

“After reading several other books, I still was not able to get my webpage to work the way I wanted. After reading Murach’s book, it works perfectly.”
 - Harold E. Luse, posted online

“I kept your book at my side throughout the entire project. It was indispensable to me. The answers were right there at every turn. All the examples made sense to me, and they all worked!”
 - Alan Vogt, ETL Consultant, Massachusetts

"You folks make the hard stuff seem easy."
 - Thomas Finn, Sr. Software Developer, Illinois

View the table of contents for this book in a PDF: Table of Contents (PDF)

Click on any chapter title to display or hide its content.

Section 1  Get off to a fast start

Chapter 1  An introduction to web programming with ASP.NET Core MVC

An introduction to web apps

The components of a web app

How static web pages are processed

How dynamic web pages are processed

An introduction to the MVC pattern

An introduction to ASP.NET Core MVC

Three ASP.NET programming models for web apps

Some web components of .NET and .NET Core

An introduction to ASP.NET Core middleware

How state works in a web app

Tools for working with ASP.NET Core MVC apps

An introduction to Visual Studio

An introduction to Visual Studio Code

How an ASP.NET Core MVC app works

How coding by convention works

How a controller passes a model to a view

How a view uses Razor code, tag helpers, and Bootstrap CSS classes

How the Startup.cs file configures the middleware for an app

Chapter 2  How to develop a single-page MVC web app

How to create a Core MVC web app

How to start a new web app

How to select a template

How to set up the MVC folders

How to add a controller

How to add a Razor view

How to configure an MVC web app

How to run a web app and fix errors

How to run a web app

How to find and fix errors

How to work with a model

How to add a model

How to add a Razor view imports page

How to code a strongly-typed view

How to handle GET and POST requests

How to work with a strongly-typed view

The Future Value app after handling GET and POST requests

How to organize the files for a view

How to add a CSS style sheet

How to add a Razor layout, view start, and view

The code for a Razor layout, view start, and view

How to validate user input

How to set data validation rules in the model

The model class with data validation

How to check the data validation

How to display validation error messages

The Future Value app after validating data

Chapter 3  How to make a web app responsive with Bootstrap

An introduction to responsive web design

A responsive user interface

How to add client-side libraries such as Bootstrap and jQuery

How to manage client-side libraries with LibMan

How to enable client-side libraries

How to get started with Bootstrap

The classes of the Bootstrap grid system

How the Bootstrap grid system works

How to work with forms

How to work with buttons, images, and jumbotrons

How to work with margins and padding

The code for the view of the Future Value app

More skills for Bootstrap CSS classes

How to format HTML tables

How to align and capitalize text

How to provide context

More skills for Bootstrap components

How to work with button groups

How to work with icons and badges

How to work with button dropdowns

How to work with list groups

How to work with alerts and breadcrumbs

How to work with navigation bars

How to create navs

How to create navbars

How to position navbars

Chapter 4  How to develop a data-driven MVC web app

An introduction to the Movie List app

The pages of the app

The folders and files of the app

How to use EF Core

How to add EF Core to your project

How to create a DbContext class

How to seed initial data

How to add a connection string

How to enable dependency injection

How to use migrations to create the database

How to work with data

How to select data

How to insert, update, and delete data

How to view the generated SQL statements

The Movie List app

The Home controller

The Home/Index view

The Movie controller

The Movie/Edit view

The Movie/Delete view

How to work with related data

How to relate one entity to another

How to update the DbContext class and the seed data

How to use migrations to update the database

How to select related data and display it on the Movie List page

How to display related data on the Add and Edit Movie pages

How to make user-friendly URLs

How to make URLs lowercase with a trailing slash

How to add a slug

Chapter 5  How to manually test and debug an ASP.NET Core web app

How to test an ASP.NET Core web app

How to run a web app

How to use the browser’s developer tools

How to use the Internal Server Error page

How to use the Exception Helper

How to use the debugger

How to use breakpoints

How to work in break mode

How to monitor variables and expressions

How to use tracepoints

Section 2  Master the essential skills

Chapter 6  How to work with controllers and routing

How to use the default route

How to configure the default route

How the default route works

How to code a simple controller and its actions

How to code a controller that uses the id segment

How to create custom routes

How to include static content in a route

How to work with multiple routing patterns

How to use attribute routing

How to change the routing for an action

More skills for changing the routing for an action

How to change the routing for a controller

Best practices for creating URLs

How to work with areas

How to set up areas

How to associate controllers with areas

Chapter 7  How to work with Razor views

How to use Razor syntax

How to work with code blocks and inline expressions

How to code inline loops

How to code inline conditional statements

Essential skills for Razor views

The starting folders and files for an app

How to code controllers that return views

How to create a default layout and enable tag helpers

How to use tag helpers to generate URLs for links

Three views that use the default layout and tag helpers

The three views displayed in a browser

More skills for Razor views

More tag helpers for generating URLs for links

How to format numbers in a view

How to work with a model

How to pass a model to a view

How to display model properties in a view

How to bind model properties to HTML elements

How to bind a list of items to an element

How to display a list of model objects

How to work with Razor layouts

How to create and apply a layout

How to nest layouts

How to use view context

How to use sections

The Guitar Shop website

The user interface for customers

The user interface for administrators

Chapter 8  How to transfer data from controllers

How to use ActionResult objects

An introduction to ActionResult subtypes

How to return ActionResult objects

How to use the ViewData and ViewBag properties

How to use the ViewData property

How to use the ViewBag property

The NFL Teams 1.0 app

The user interface

The model layer

The Home controller

The layout

The Home/Index view

How to work with view models

How to create a view model

The updated Index() action method

The updated Home/Index view

How to redirect a request

How to use the ActionResult classes for redirection

How to use the Post-Redirect-Get pattern

How to use the TempData property

How to get started with TempData

How to use methods of the TempData dictionary

The NFL Teams 2.0 app

The user interface

The view model classes

The Details() action method

The Home/Index view

The Home/Details view

Chapter 9  How to work with session state and cookies

How ASP.NET MVC handles state

Six ways to maintain state

An introduction to session state

How to work with session state

How to configure an app to use session state

How to work with session state items in a controller

How to get session state values in a view

How to use JSON to store objects in session state

How to extend the ISession interface

How to use a wrapper class

The NFL Teams 3.0 app

The user interface

The session classes

The Home controller

The layout

The Home/Index view

The Home/Details view

The Favorites controller

The Favorites/Index view

How to work with cookies

How to work with session cookies

How to work with persistent cookies

The NFL Teams 4.0 app

The cookies class

The updated session class

The updated Home controller

The updated Favorites controller

Chapter 10  How to work with model binding

An introduction to MVC model binding

How to use controller properties to retrieve GET and POST data

How to use model binding to retrieve GET and POST data

How to use model binding with complex types

Model binding in the NFL Teams app

An action method that binds to primitive types

An action method that binds to complex types

More skills for binding data

Two ways to code a submit button

How to use a submit button to post a name/value pair

How to post an array to an action method

How to control the source of bound values

How to control which values are bound

The ToDo List app

The user interface

The entity classes

The database context class

A utility class for filtering

The Home controller

The layout

The Home/Index view

The Home/Add view

Chapter 11  How to validate data

How data validation works in MVC

The default data validation provided by model binding

How to use data attributes for validation

A Registration page with data validation

How to control the user experience

How to format validation messages with CSS

How to check validation state and use code to set validation messages

How to display model-level and property-level validation messages

How to enable client-side validation

How to customize server-side validation

How to create a custom data attribute

How to pass values to a custom data attribute

How to check multiple properties

How to customize client-side validation

How to add data attributes to the generated HTML

How to add a validation method to the jQuery validation library

How to work with remote validation

The Registration app

The user interface and CSS

The Customer and RegistrationContext classes

The MinimumAgeAttribute class

The minimum-age JavaScript file

The Validation and Register controllers

The layout

The Register/Index view

Chapter 12  How to use EF Core

How to create a database from code

How to code entity and DB context classes

How to configure the database

How to manage configuration files

EF commands for working with a database

How to use EF migration commands

How to work with relationships

How entities are related

How to configure a one-to-many relationship

How to configure a one-to-one relationship

How to configure a many-to-many relationship

How to control delete behavior

The Bookstore database classes

The entity classes

The context and configuration classes

How to create code from a database

How to generate DB context and entity classes

How to configure a generated DB context class

How to modify a generated entity class

How to work with data in a database

How to query data

How to work with projections and related entities

How to insert, update, and delete data

How to handle concurrency conflicts

How to check for concurrency conflicts

How handle a concurrency exception

How to encapsulate your EF code

How to code a data access class

How to use a generic query options class

How to use the repository pattern

How to use the unit of work pattern

Chapter 13  The Bookstore website

The user interface and folder structure

The end user pages

The admin user pages

The folders and files

Some general-purpose code

Extension methods for sessions and strings

The generic QueryOptions class

The generic Repository class

The paging and sorting of the Author Catalog

The custom route and the GridDTO class

The RouteDictionary class

The GridBuilder class

The Author/List view model and the Author controller

The Author/List view

The paging, sorting, and filtering of the Book Catalog

The custom route and the BooksGridDTO class

The FilterPrefix class and the updated RouteDictionary class

The BooksGridBuilder class

The BookQueryOptions and BookstoreUnitOfWork classes

The Book/List view model and the Book controller

The Book/List view

The Cart page

Extension methods for cookies

The user interface

The model classes

The Cart controller

The Cart/Index view

The book search of the Admin pages

The user interface

The SearchData and SearchViewModel classes

The Search() action methods of the Book controller

The Delete() action method of the Genre controller

Section 3  Add more skills as you need them

Chapter 14  How to use dependency injection and unit testing

How to use dependency injection (DI)

How to configure your app for DI

How to use DI with controllers

How to use DI with an HttpContextAccessor object

How to use DI with action methods

How to use DI with views

How to get started with unit testing

How unit tests work

How to add an xUnit project to a solution

How to write a unit test

How to run a unit test

How to test methods that have dependencies

How to use a fake repository object

How to use a fake TempData object

How to create fake objects with Moq

How to work with mock objects

How to mock a repository object

How to mock a TempData object

How to mock an HttpContextAccessor object

The Bookstore.Tests project

The Test Explorer

The BookControllerTests class

The AdminBookControllerTests class

The CartTests class

Chapter 15  How to work with tag helpers, partial views, and view components

An introduction to tag helpers

How to register and use tag helpers

How tag helpers compare to HTML helpers

How to create custom tag helpers

How to create a custom tag helper

How to create a tag helper for a non-standard HTML element

How to use extension methods with tag helpers

How to control the scope of a tag helper

How to use a tag helper to add elements

More skills for custom tag helpers

How to use properties with a tag helper

How to work with the model property that an element is bound to

How to use dependency injection with a tag helper

How to create a conditional tag helper

How to generate URLs in a tag helper

How to work with partial views

How to create and use a partial view

How to pass data to a partial view

How to work with view components

How to create and use a view component

How to pass data to a view component

How view components can simplify an app

The Bookstore app

The Book Catalog page

The updated ActiveNavbar tag helper

The layout

The Book/List view

Chapter 16  How to authenticate and authorize users

An introduction to authentication

Three types of authentication

How individual user account authentication works

An introduction to ASP.NET Identity

How to restrict access to controllers and actions

How to get started with Identity

How to add Identity classes to the DB context

How to add Identity tables to the database

How to configure the middleware for Identity

How to add Log In/Out buttons and links to the layout

How to start the Account controller

How to register a user

The Register view model

The Account/Register view

The Register() action method for POST requests

The LogOut() action method for POST requests

How to log in a user

The Login view model

The Account/Login view

The LogIn() action method for POST requests

How to work with roles

Properties and methods for working with roles

The User entity and view model

The User controller and its Index() action method

The User/Index view

Other action methods of the User controller

The code that restricts access

How to seed roles and users

More skills for working with Identity

How to change a user’s password

How to add more user registration fields

Chapter 17  How to use Visual Studio Code

How to work with existing projects

How to install VS Code

How to open and close a project folder

How to view and edit files

How to run and stop a project

How to create the database for a project

A summary of .NET EF Core commands

How to start a new project

How to create a new project

How to add NuGet packages to a project

How to work with the folders and files

How to install and manage client-side libraries

How to debug a project

How to set a breakpoint

How to work in break mode

Appendixes

Appendix A  How to set up Windows for this book

How to install Visual Studio

How to install the source code for this book

How to create the databases for this book

Appendix B  How to set up macOS for this book

How to install Visual Studio

How to install the source code for this book

Problems and solutions when using macOS with this book

How to install and use DB Browser for SQLite

Sample chapters

Chapter 1: An introduction to web programming with ASP.NET Core MVC

This chapter gives you the background you need to start writing ASP.NET Core MVC apps. It describes how web apps work, how ASP.NET Core MVC apps work, and what software you need for developing these apps.

Chapter 2: How to develop a single-page MVC web app

This chapter teaches you how to use Visual Studio to code and test a single-page ASP.NET Core MVC web app that calculates the future value of a series of investments. That includes how to work with controllers, model binding, Razor views, and data validation.

Chapter 1 PDF  Download Now

Chapter 2 PDF  Download Now

The book applications and exercises

This download includes:

  • The source code for the applications that are presented throughout the book
  • The starting points for the exercises that are presented at the end of each chapter
  • The solutions to the exercises so you can check your work

The appendix in the book describes how to install and use these files.

Exe file for Windows (65.1Mb) Download Now

Zip file for Windows (64.9Mb) Download Now

Zip file for nacOS (67.7Mb) Download Now

On this page, we’ll be posting answers to the questions that come up most often about this book. So if you have any questions that you haven’t found answered here at our site, please email us. Thanks!

There are no book corrections that we know of at this time. But if you find any, please email us, and we’ll post any corrections that affect the technical accuracy of the book here. Thank you!

There are no reviews for this product yet.

To leave a review, please log in to your account.     Log In Here

Our Ironclad Guarantee

You must be satisfied. Try our print books for 30 days or our eBooks for 14 days. If they aren't the best you've ever used, you can return the books or cancel the eBooks for a prompt refund. No questions asked!

Contact Murach Books

For orders and customer service:

1-800-221-5528

Weekdays, 8 to 4 Pacific Time

College Instructors

If you're a college instructor who would like to consider a book for a course, please visit our website for instructors to learn how to get a complimentary review copy and the full set of instructional materials.