title
Learn ASP.NET Core 3.1 - Full Course for Beginners [Tutorial]
description
Learn ASP.NET Core 3.1 in this complete tutorial course for beginners.
After learning about the history and basics of ASP.NET Core, you will learn how to build a small book list application with CRUD operations. You will learn how to use the Entity Framework for integration with a database with ASP.NET Core Razor Pages.
You will also learn how to build a book list application using ASP.NET MVC and see how to use DataTables with API Calls in a Razor Project.
It could be helpful to have some familiarity with C# and SQL. If you want to learn about those topics, try these videos:
🎥 C#: https://www.youtube.com/watch?v=GhQdlIFylQ8
🎥 SQL: https://www.youtube.com/watch?v=HXV3zeQKqGY
✏️ Course from Bhrugen Patel. Check out more of his courses:
🔗 MVC Advanced Course: https://www.udemy.com/course/complete-aspnet-core-21-course/learn/?referralCode=0533F3B61F426407BE00
🔗 Razor Advanced Course: https://www.udemy.com/course/advanced-aspnet-core-3-razor-pages/learn/?referralCode=6C89600F2C73A16F63F3
🔗 All Courses: http://www.bhrugen.com/
⭐️ Code ⭐️
💻 Book List Razor: https://github.com/bhrugen/BookListRazor
💻 Book List MVC: https://github.com/bhrugen/BookListMVC
⭐️ Coure Contents ⭐️
Section 1: Introduction
⌨️ (0:00:00) Welcome
⌨️ (0:02:41) Razor Project Overview
⌨️ (0:04:51) MVC Project Overview
⌨️ (0:05:52) Evolution of ASP.NET Core
⌨️ (0:10:21) Tools Needed
⌨️ (0:11:49) Github Url
Section 2: Razor Project
⌨️ (0:12:50) Introduction
⌨️ (0:13:18) Create Project
⌨️ (0:16:02) Razor Pages
⌨️ (0:19:17) csproj
⌨️ (0:22:51) launchsettings
⌨️ (0:24:58) wwwroot
⌨️ (0:26:53) Pages Folder
⌨️ (0:31:23) Routing in Razor Pages
⌨️ (0:36:42) Tag Helpers
⌨️ (0:40:03) Main Methods
⌨️ (0:42:36) Startup Part 1
⌨️ (0:45:49) Startup Part 2
⌨️ (0:49:57) Middlewares
⌨️ (0:54:17) AppSettings
⌨️ (0:55:34) Dependency Injection
Section 3: Book List Razor
⌨️ (0:59:27) Introduction
⌨️ (0:59:57) Runtime Razor Package
⌨️ (1:02:56) Create Book Model
⌨️ (1:05:15) Add Connection String and Packages
⌨️ (1:08:41) Add Book Table to Database
⌨️ (1:14:01) Book Index Get Handler
⌨️ (1:20:05) Designing Book Index Page Part 1
⌨️ (1:23:20) Designing Book Index Page Part 2
⌨️ (1:30:44) Create Book Page Model
⌨️ (1:34:19) Create Book Page UI
⌨️ (1:38:47) Create Book and Validations
⌨️ (1:44:45) Client Side Validations
⌨️ (1:46:41) Edit Book Get Handler
⌨️ (1:49:33) Edit Book UI
⌨️ (1:50:55) Edit Post Handler
⌨️ (1:55:30) Delete Book
⌨️ (1:59:21) Book Get API
⌨️ (2:03:26) DataTables
⌨️ (2:12:05) Delete API Call
⌨️ (2:15:03) Delete Book
⌨️ (2:19:36) Upsert Page Handlers
⌨️ (2:24:43) Upsert Page UI
Section 4: MVC Project
⌨️ (2:23:00) Introduction
⌨️ (2:28:34) Create Project
⌨️ (2:31:06) MVC Folders
⌨️ (2:33:24) Routing in MVC
Section 5: Book List MVC
⌨️ (2:38:29) Introduction
⌨️ (2:38:53) Create Book Model and Push to Database
⌨️ (2:46:15) Create Books Controller
⌨️ (2:49:06) Third Party Links
⌨️ (2:51:13) BookList Js and API Calls
⌨️ (2:56:00) Index View Book List
⌨️ (3:00:03) Upsert Get Action
⌨️ (3:02:50) Upsert View
⌨️ (3:09:18) Upsert Post And Delete
detail
{'title': 'Learn ASP.NET Core 3.1 - Full Course for Beginners [Tutorial]', 'heatmap': [{'end': 9982.707, 'start': 9857.557, 'weight': 1}], 'summary': 'This asp.net core 3.1 tutorial covers basics, project setup, file changes, concepts, dependency injection, database setup, book management, javascript data table, api functionality, mvc project setup, and mvc operations, requiring 3 months of coding in c# and basic sql familiarity, emphasizing a solid foundation for deeper courses.', 'chapters': [{'end': 709.137, 'segs': [{'end': 79.739, 'src': 'embed', 'start': 24.059, 'weight': 0, 'content': [{'end': 34.268, 'text': 'Once we understand that, then we will take a look at new concepts like middleware, routing, tag helpers, razor syntax, and much more.', 'start': 24.059, 'duration': 10.209}, {'end': 40.013, 'text': 'Now with ASP.NET Core, there are two ways to build a web application.', 'start': 35.209, 'duration': 4.804}, {'end': 43.376, 'text': 'First approach is MVC application.', 'start': 40.834, 'duration': 2.542}, {'end': 47.32, 'text': 'And the second approach is razor pages application.', 'start': 43.837, 'duration': 3.483}, {'end': 54.018, 'text': 'We will be building projects in both the technologies to understand how the basics work.', 'start': 48.257, 'duration': 5.761}, {'end': 63.76, 'text': 'Both the projects will be built with a basic GRUD website, which stands for Create, Read, Update and Delete functionality.', 'start': 55.018, 'duration': 8.742}, {'end': 73.622, 'text': 'So we will understand how to connect with database and play with entity framework in our ASP.NET Core web application.', 'start': 64.68, 'duration': 8.942}, {'end': 79.739, 'text': 'Now before we start, there are some pre-requisites that you should be familiar with.', 'start': 74.778, 'duration': 4.961}], 'summary': 'Learn asp.net core with mvc and razor pages, build grud website, and understand entity framework.', 'duration': 55.68, 'max_score': 24.059, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I24059.jpg'}, {'end': 194.615, 'src': 'embed', 'start': 137.26, 'weight': 2, 'content': [{'end': 144.265, 'text': 'I have courses on both MVC as well as Razer Pages with ASP.NET Core,', 'start': 137.26, 'duration': 7.005}, {'end': 150.65, 'text': 'and I will also show you how you can enroll into those courses for the lowest price.', 'start': 144.265, 'duration': 6.385}, {'end': 158.673, 'text': "That being said, let's get started on this exciting journey to explore the basics of ASP dotnet core.", 'start': 151.906, 'duration': 6.767}, {'end': 161.597, 'text': 'And I will see you in the next video.', 'start': 159.194, 'duration': 2.403}, {'end': 165.561, 'text': "In this course, we'll be building two projects.", 'start': 163.138, 'duration': 2.423}, {'end': 168.684, 'text': 'First will be a simple razor project.', 'start': 166.282, 'duration': 2.402}, {'end': 176.819, 'text': "And second one will be our main project which will use MVC So let me demo the first project that we'll be building.", 'start': 169.025, 'duration': 7.794}, {'end': 184.686, 'text': "It's a simple book list razor project in which if you select the book tab, it will display list of all of the books.", 'start': 177.2, 'duration': 7.486}, {'end': 188.511, 'text': 'Now here in the list you can see two types of tables.', 'start': 185.649, 'duration': 2.862}, {'end': 194.615, 'text': 'That is because at the end here we are using data tables which makes call of API.', 'start': 189.151, 'duration': 5.464}], 'summary': 'Asp.net core course includes mvc and razor pages projects with a demo of a book list razor project using data tables for api calls.', 'duration': 57.355, 'max_score': 137.26, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I137260.jpg'}, {'end': 283.088, 'src': 'embed', 'start': 250.594, 'weight': 3, 'content': [{'end': 253.816, 'text': 'And if you try here it will be again an edit page.', 'start': 250.594, 'duration': 3.222}, {'end': 256.536, 'text': 'So this is more of a simplified view.', 'start': 254.436, 'duration': 2.1}, {'end': 260.38, 'text': 'And then at bottom what we see is more of an advanced view.', 'start': 257.017, 'duration': 3.363}, {'end': 264.473, 'text': 'That being said, we are performing CRUD operations on our book.', 'start': 261.411, 'duration': 3.062}, {'end': 266.695, 'text': 'But this project is not just that.', 'start': 264.794, 'duration': 1.901}, {'end': 272.68, 'text': "We'll be learning razor pages and how page model and page view comes into the picture.", 'start': 267.356, 'duration': 5.324}, {'end': 283.088, 'text': 'So even though this is a small project for CRUD operation, there is lots of basic functionalities and basic file overview that you need to understand.', 'start': 273.942, 'duration': 9.146}], 'summary': 'Learning crud operations and razor pages for a small project with basic functionalities and file overview.', 'duration': 32.494, 'max_score': 250.594, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I250594.jpg'}, {'end': 415.017, 'src': 'embed', 'start': 382.312, 'weight': 9, 'content': [{'end': 389.853, 'text': 'With Classic ASP, Microsoft made it possible to have server-side scripting to dynamic web pages.', 'start': 382.312, 'duration': 7.541}, {'end': 394.775, 'text': 'The biggest revolution came when Microsoft released .', 'start': 390.694, 'duration': 4.081}, {'end': 395.575, 'text': 'NET Framework.', 'start': 394.775, 'duration': 0.8}, {'end': 402.037, 'text': 'Microsoft introduced ASP.NET Web Forms in 2002.', 'start': 396.713, 'duration': 5.324}, {'end': 407.402, 'text': 'This made creation of web page similar to the creation of Windows Form.', 'start': 402.037, 'duration': 5.365}, {'end': 411.016, 'text': 'There are few downsides with web forms.', 'start': 408.715, 'duration': 2.301}, {'end': 415.017, 'text': 'Web forms tried to make stateless web stateful.', 'start': 411.736, 'duration': 3.281}], 'summary': "Microsoft's introduction of asp.net web forms in 2002 revolutionized server-side scripting for dynamic web pages, but also posed challenges in making stateless web stateful.", 'duration': 32.705, 'max_score': 382.312, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I382312.jpg'}, {'end': 502.373, 'src': 'embed', 'start': 472.039, 'weight': 8, 'content': [{'end': 479.522, 'text': 'Although there were few downsides, web forms were generally successful to get site up and running quickly.', 'start': 472.039, 'duration': 7.483}, {'end': 493.311, 'text': 'Couple of years later in 2009, Microsoft released the first version of ASP.NET MVC and they tried to overcome most of the problems with web forms.', 'start': 480.649, 'duration': 12.662}, {'end': 497.192, 'text': 'It had emphasis on separation of concern.', 'start': 494.351, 'duration': 2.841}, {'end': 502.373, 'text': 'MVC code is typically much easier to write unit tests for.', 'start': 497.792, 'duration': 4.581}], 'summary': 'Asp.net mvc improved web forms, released in 2009, emphasized separation of concern and facilitated easier unit testing.', 'duration': 30.334, 'max_score': 472.039, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I472039.jpg'}, {'end': 625.583, 'src': 'embed', 'start': 563.929, 'weight': 5, 'content': [{'end': 567.93, 'text': 'Now ASP.NET Core is built on top of the new .', 'start': 563.929, 'duration': 4.001}, {'end': 569.171, 'text': 'NET Core framework.', 'start': 567.93, 'duration': 1.241}, {'end': 574.192, 'text': 'NET Core is the very first platform version of .', 'start': 570.351, 'duration': 3.841}, {'end': 577.973, 'text': 'NET and hence it is not tied to just Windows.', 'start': 574.192, 'duration': 3.781}, {'end': 586.047, 'text': 'ASP.NET Core as compared to the old version of MVC is not tied to the .', 'start': 579.355, 'duration': 6.692}, {'end': 588.992, 'text': 'NET Framework assemblies like System.Web.', 'start': 586.047, 'duration': 2.945}, {'end': 594.659, 'text': 'ASP.NET Core team has been very active with the new versions.', 'start': 590.618, 'duration': 4.041}, {'end': 598.2, 'text': 'And then in 2017, they released .', 'start': 595.199, 'duration': 3.001}, {'end': 603.981, 'text': 'NET Core 2 followed by 2.1 and 2.2 in 2018.', 'start': 598.2, 'duration': 5.781}, {'end': 612.243, 'text': 'Finally, in September of 2019, ASP.NET Core 3 has been released, which we will be using in this course.', 'start': 603.981, 'duration': 8.262}, {'end': 618.325, 'text': "In this video, let me show you all the tools that we'll need for this course.", 'start': 614.384, 'duration': 3.941}, {'end': 623.462, 'text': 'The first and most important is Visual Studio 2019.', 'start': 619.161, 'duration': 4.301}, {'end': 625.583, 'text': "This is the IDE that we'll be using.", 'start': 623.462, 'duration': 2.121}], 'summary': 'Asp.net core is not tied to windows, with latest version 3 released in 2019, and visual studio 2019 is the recommended ide.', 'duration': 61.654, 'max_score': 563.929, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I563929.jpg'}], 'start': 0.569, 'title': 'Asp.net core 3.1 basics', 'summary': 'Introduces asp.net core 3.1 basics, including file and folder structure, middleware, routing, tag helpers, and razor syntax. it involves creating two web applications using mvc and razor pages with a basic crud website, requiring 3 months of coding in c# and basic sql familiarity. the source code of projects is published on github, focusing on building a solid foundation before diving into deeper courses.', 'chapters': [{'end': 352.237, 'start': 0.569, 'title': 'Introduction to asp.net core 3.1', 'summary': "Introduces the basics of asp.net core 3.1, including the new file and folder structure, concepts like middleware, routing, tag helpers, and razor syntax, and the creation of two web applications using mvc and razor pages with a basic grud website, requiring 3 months of coding in c sharp and basic sql familiarity, with the projects' source code published on github and a focus on building a solid foundation before diving into deeper courses.", 'duration': 351.668, 'highlights': ['The course covers the basics of ASP.NET Core 3.1, including the new file and folder structure, middleware, routing, tag helpers, and razor syntax, and demonstrates the creation of web applications using both MVC and razor pages with a basic GRUD website, requiring 3 months of coding in C sharp and familiarity with basic SQL.', "The projects built in the course focus on a basic GRUD website, demonstrating Create, Read, Update, and Delete functionality, with the source code published on GitHub and a recommendation for students to compare their code with the instructor's version to identify differences and learn from errors.", 'The instructor emphasizes the importance of building a solid foundation in ASP.NET Core before diving into deeper and complex courses, and offers more detailed and in-depth courses on both MVC and Razer Pages with ASP.NET Core, along with guidance on enrolling for the lowest price.', 'The chapter provides a detailed demonstration of building two projects: a simple razor project displaying a book list and a main project using MVC, with a focus on CRUD operations and the use of data tables, validations, editing, and deletion, aiming to provide a great start for learning MVC and ASP.NET Core.', 'The projects involve learning about razor pages, page model, page view, and other basic functionalities, and the final project is introduced as being more advanced than the initial razor project, offering a comprehensive demonstration of creating CRUD operations on book lists using MVC and highlighting the basic functionalities and file overviews to understand.']}, {'end': 709.137, 'start': 352.977, 'title': 'Asp.net evolution overview', 'summary': 'Gives an overview of the evolution of asp.net, starting from classic asp to asp.net core, highlighting key milestones and challenges, and emphasizing the tools required for the course.', 'duration': 356.16, 'highlights': ['ASP.NET Core introduces a significant shift in the platform, being built on top of the new .NET Core framework, making it not tied to just Windows, and the active ASP.NET Core team releasing new versions.', 'The introduction of ASP.NET Web Forms in 2002 revolutionized web page creation, although it had downsides such as making stateless web stateful and generating and transferring large amounts of data with each request.', 'In 2009, the first version of ASP.NET MVC was released, addressing the problems with web forms and emphasizing on separation of concern and easier unit testing, although it had its own flaws and was closely tied to System.Web and IIS.', 'Microsoft released ASP.NET Core in June 2016, being the first version built on top of the new .NET Core framework, not tied to the .NET Framework assemblies like System.Web, and actively releasing new versions.', 'The tools required for the course include Visual Studio 2019, .NET Core 3.1, SQL Server 2019, and SQL Server Management Studio, all of which are available for free.']}], 'duration': 708.568, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I569.jpg', 'highlights': ['The course covers the basics of ASP.NET Core 3.1, including file and folder structure, middleware, routing, tag helpers, and razor syntax, and demonstrates the creation of web applications using both MVC and razor pages with a basic GRUD website, requiring 3 months of coding in C sharp and familiarity with basic SQL.', "The projects built in the course focus on a basic GRUD website, demonstrating Create, Read, Update, and Delete functionality, with the source code published on GitHub and a recommendation for students to compare their code with the instructor's version to identify differences and learn from errors.", 'The chapter provides a detailed demonstration of building two projects: a simple razor project displaying a book list and a main project using MVC, with a focus on CRUD operations and the use of data tables, validations, editing, and deletion, aiming to provide a great start for learning MVC and ASP.NET Core.', 'The projects involve learning about razor pages, page model, page view, and other basic functionalities, and the final project is introduced as being more advanced than the initial razor project, offering a comprehensive demonstration of creating CRUD operations on book lists using MVC and highlighting the basic functionalities and file overviews to understand.', 'The instructor emphasizes the importance of building a solid foundation in ASP.NET Core before diving into deeper and complex courses, and offers more detailed and in-depth courses on both MVC and Razer Pages with ASP.NET Core, along with guidance on enrolling for the lowest price.', 'The tools required for the course include Visual Studio 2019, .NET Core 3.1, SQL Server 2019, and SQL Server Management Studio, all of which are available for free.', 'ASP.NET Core introduces a significant shift in the platform, being built on top of the new .NET Core framework, making it not tied to just Windows, and the active ASP.NET Core team releasing new versions.', 'Microsoft released ASP.NET Core in June 2016, being the first version built on top of the new .NET Core framework, not tied to the .NET Framework assemblies like System.Web, and actively releasing new versions.', 'In 2009, the first version of ASP.NET MVC was released, addressing the problems with web forms and emphasizing on separation of concern and easier unit testing, although it had its own flaws and was closely tied to System.Web and IIS.', 'The introduction of ASP.NET Web Forms in 2002 revolutionized web page creation, although it had downsides such as making stateless web stateful and generating and transferring large amounts of data with each request.']}, {'end': 1183.343, 'segs': [{'end': 759.824, 'src': 'embed', 'start': 710.978, 'weight': 0, 'content': [{'end': 715.442, 'text': "In this video I want to show you where you will find all the code that we'll be building.", 'start': 710.978, 'duration': 4.464}, {'end': 719.726, 'text': 'For that one place will be you have to go to bruggen.com.', 'start': 716.283, 'duration': 3.443}, {'end': 721.528, 'text': 'In there I have courses.', 'start': 720.166, 'duration': 1.362}, {'end': 724.164, 'text': 'Right now we are on the free course.', 'start': 722.423, 'duration': 1.741}, {'end': 730.53, 'text': 'If you go on the details, if you click course content, it will download the completed code.', 'start': 724.605, 'duration': 5.925}, {'end': 736.414, 'text': 'But if you want lecture by lecture on what was changed, you can click on GitHub code.', 'start': 730.95, 'duration': 5.464}, {'end': 741.699, 'text': 'Here it will open up both the projects that will be building in this course.', 'start': 737.135, 'duration': 4.564}, {'end': 746.314, 'text': 'Here, if you see the comments, they will be based on the lecture name.', 'start': 742.731, 'duration': 3.583}, {'end': 753.019, 'text': 'Inside Razer as well, for each lecture, you will see what exactly was changed or updated.', 'start': 747.014, 'duration': 6.005}, {'end': 759.824, 'text': 'And you can make sure that you have those same things if you face any issue in a particular lecture.', 'start': 753.679, 'duration': 6.145}], 'summary': 'Access code for course at bruggen.com, with lecture-based comments and github code.', 'duration': 48.846, 'max_score': 710.978, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I710978.jpg'}, {'end': 813.425, 'src': 'embed', 'start': 784.751, 'weight': 2, 'content': [{'end': 793.757, 'text': 'With this, we will also understand how an ASP dotnet core application is started, and what are the files that are involved.', 'start': 784.751, 'duration': 9.006}, {'end': 798.5, 'text': "So let's get started with all of that from the next video.", 'start': 794.657, 'duration': 3.843}, {'end': 804.81, 'text': 'When you open up Visual Studio 2019, it displays a nice page.', 'start': 800.302, 'duration': 4.508}, {'end': 808.636, 'text': 'On the left-hand side, you can see all the projects you were working on.', 'start': 804.97, 'duration': 3.666}, {'end': 813.425, 'text': 'And on the right-hand side, you can see options to create a new project.', 'start': 809.237, 'duration': 4.188}], 'summary': 'The asp.net core application startup process and visual studio 2019 interface are discussed.', 'duration': 28.674, 'max_score': 784.751, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I784751.jpg'}, {'end': 1038.416, 'src': 'embed', 'start': 1009.485, 'weight': 3, 'content': [{'end': 1020.682, 'text': 'Everything that you can do with MVC, you can do the same using razor pages, like routing models, action result, tag helpers, and so on.', 'start': 1009.485, 'duration': 11.197}, {'end': 1024.045, 'text': 'Finally, razor pages have two parts.', 'start': 1021.463, 'duration': 2.582}, {'end': 1028.749, 'text': 'First is the UI, which is more like the view in MVC.', 'start': 1024.766, 'duration': 3.983}, {'end': 1038.416, 'text': 'And then we have the page model, which is a combination of models, as well as view models and the controller action methods.', 'start': 1029.289, 'duration': 9.127}], 'summary': 'Razor pages mirror mvc, offering similar capabilities, including routing models, action results, and tag helpers; comprising ui and page model.', 'duration': 28.931, 'max_score': 1009.485, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1009485.jpg'}, {'end': 1161.391, 'src': 'embed', 'start': 1133.006, 'weight': 4, 'content': [{'end': 1137.909, 'text': 'Similarly, if you had a post handler, it would be something like this,', 'start': 1133.006, 'duration': 4.903}, {'end': 1144.293, 'text': "in which we'll have public void on post and we'll have the implementation within the brackets.", 'start': 1137.909, 'duration': 6.384}, {'end': 1149.697, 'text': 'We will undo the change that we did because I just wanted to show that right now.', 'start': 1145.374, 'duration': 4.323}, {'end': 1155.681, 'text': 'But as we proceed, we will be implementing the handlers for our razor pages.', 'start': 1150.377, 'duration': 5.304}, {'end': 1161.391, 'text': "In this video, let's take a look at the project configuration file.", 'start': 1157.409, 'duration': 3.982}], 'summary': 'Introduction to project configuration file in video tutorial.', 'duration': 28.385, 'max_score': 1133.006, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1133006.jpg'}], 'start': 710.978, 'title': 'Accessing course code and creating asp.net core razor project', 'summary': 'Details accessing course code and resources from bruggen.com and github, and creating an asp.net core razor project in visual studio 2019, covering project template selection, .net core version configuration, and razor pages, providing a comprehensive overview of project configuration.', 'chapters': [{'end': 759.824, 'start': 710.978, 'title': 'Finding course code and resources', 'summary': 'Explains where to access the code and resources for the course, including downloading completed code from bruggen.com and accessing lecture-specific code on github, ensuring easy reference and issue resolution.', 'duration': 48.846, 'highlights': ['Accessing completed code from bruggen.com by clicking on course details and course content.', 'Accessing lecture-specific code on GitHub, which includes comments based on lecture name and details of changes made inside Razer for each lecture.']}, {'end': 1183.343, 'start': 760.645, 'title': 'Creating asp.net core razor project', 'summary': 'Covers the process of creating an asp.net core razor project in visual studio 2019, including selecting the project template, configuring .net core version, and understanding razor pages and page models, also providing an overview of project configuration file.', 'duration': 422.698, 'highlights': ['Creating ASP.NET Core Razor project in Visual Studio 2019', 'Understanding Razor pages and page models', 'Overview of project configuration file']}], 'duration': 472.365, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I710978.jpg', 'highlights': ['Accessing completed code from bruggen.com by clicking on course details and course content.', 'Accessing lecture-specific code on GitHub, including comments based on lecture name and details of changes made inside Razor for each lecture.', 'Creating ASP.NET Core Razor project in Visual Studio 2019', 'Understanding Razor pages and page models', 'Overview of project configuration file']}, {'end': 2166.089, 'segs': [{'end': 1232.816, 'src': 'embed', 'start': 1183.343, 'weight': 0, 'content': [{'end': 1194.612, 'text': 'csproj Project file has been there since a long time, but the format of the file and how it works is different in ASP.NET Core 3.', 'start': 1183.343, 'duration': 11.269}, {'end': 1202.118, 'text': 'In the initial versions of ASP.NET Core, we had files called project.json and xproj.', 'start': 1194.612, 'duration': 7.506}, {'end': 1206.892, 'text': 'The new csproj file replaces both the file.', 'start': 1203.168, 'duration': 3.724}, {'end': 1218.062, 'text': 'Now right here you can see within property group we have the target framework which is netcore app 3.0 which is what we are using for this project.', 'start': 1207.652, 'duration': 10.41}, {'end': 1222.288, 'text': 'The target framework here is also called a node.', 'start': 1219.025, 'duration': 3.263}, {'end': 1226.971, 'text': 'After that, we will be adding more packages into our solution.', 'start': 1223.108, 'duration': 3.863}, {'end': 1232.816, 'text': 'Let me show you a quick way we go to tools, NuGet package manager solution.', 'start': 1227.752, 'duration': 5.064}], 'summary': 'Asp.net core 3 uses csproj file format, with target framework netcore app 3.0 and nuget package manager for adding packages.', 'duration': 49.473, 'max_score': 1183.343, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1183343.jpg'}, {'end': 1338.558, 'src': 'embed', 'start': 1261.265, 'weight': 2, 'content': [{'end': 1266.489, 'text': 'So every time you add a new get package, a package reference entry would be added here.', 'start': 1261.265, 'duration': 5.224}, {'end': 1270.848, 'text': 'Right now we only have one of them which we just added.', 'start': 1267.586, 'duration': 3.262}, {'end': 1274.55, 'text': 'And if we uninstall this, it will go away.', 'start': 1271.388, 'duration': 3.162}, {'end': 1277.692, 'text': 'If we go back, this should be gone.', 'start': 1275.63, 'duration': 2.062}, {'end': 1283.675, 'text': "Whenever we need to add more packages, we'll be adding more packages as per our requirement.", 'start': 1278.092, 'duration': 5.583}, {'end': 1291.319, 'text': 'Now if you have worked with previous versions of ASP dotnet core, there was a new gate for meta package.', 'start': 1284.515, 'duration': 6.804}, {'end': 1294.221, 'text': 'And let me switch to the presentation for that.', 'start': 1291.939, 'duration': 2.282}, {'end': 1300.376, 'text': 'And here we will be discussing what was the meta package and what is done with that.', 'start': 1295.484, 'duration': 4.892}, {'end': 1305.74, 'text': 'The package has been discontinued and now it is a part of the .', 'start': 1301.377, 'duration': 4.363}, {'end': 1307.361, 'text': 'NET Core class library.', 'start': 1305.74, 'duration': 1.621}, {'end': 1312.624, 'text': 'They are now updated automatically when you update the version of .', 'start': 1308.141, 'duration': 4.483}, {'end': 1313.244, 'text': 'NET Core.', 'start': 1312.624, 'duration': 0.62}, {'end': 1319.788, 'text': 'Prior to 3.0, as I said before, the meta package was included as a NuGet package.', 'start': 1313.924, 'duration': 5.864}, {'end': 1322.329, 'text': 'But now, when you install .', 'start': 1320.428, 'duration': 1.901}, {'end': 1327.813, 'text': 'NET Core on your Windows or laptop, that meta package is installed automatically.', 'start': 1322.329, 'duration': 5.484}, {'end': 1338.558, 'text': 'Also, some of the packages have been moved out from that meta package, like entity framework core, which has been moved to its own new get package,', 'start': 1328.573, 'duration': 9.985}], 'summary': 'Explanation of package references and changes in asp.net core versions, including automatic updates and package changes.', 'duration': 77.293, 'max_score': 1261.265, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1261265.jpg'}, {'end': 1629.028, 'src': 'embed', 'start': 1596.987, 'weight': 5, 'content': [{'end': 1607.383, 'text': "But we'll be leaving right this When we'll be adding more CSS or JavaScript, we'll always do that inside our www root folder.", 'start': 1596.987, 'duration': 10.396}, {'end': 1611.487, 'text': 'So that is the one place for all of your static files.', 'start': 1607.923, 'duration': 3.564}, {'end': 1619.154, 'text': 'In this video, we will be taking a look at the pages folder inside our razor project.', 'start': 1613.649, 'duration': 5.505}, {'end': 1624.487, 'text': 'So the main folder inside any razor project is the pages folder.', 'start': 1620.225, 'duration': 4.262}, {'end': 1629.028, 'text': 'In here we will have all the pages that we want for our website.', 'start': 1625.247, 'duration': 3.781}], 'summary': 'Pages folder in razor project contains all website pages.', 'duration': 32.041, 'max_score': 1596.987, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1596987.jpg'}, {'end': 1860.403, 'src': 'embed', 'start': 1832.608, 'weight': 7, 'content': [{'end': 1836.451, 'text': 'If you go to the index page, you will see the model is the same name.', 'start': 1832.608, 'duration': 3.843}, {'end': 1844.217, 'text': 'So whatever we define inside the page model here will be used as the model for the index razor page.', 'start': 1837.172, 'duration': 7.045}, {'end': 1849.892, 'text': 'This page model will be a code behind for our index page.', 'start': 1845.848, 'duration': 4.044}, {'end': 1855.738, 'text': 'This is nowhere as close to what we had in the classic ASP.NET code behind.', 'start': 1850.433, 'duration': 5.305}, {'end': 1860.403, 'text': 'This is completely rewritten and in a completely different format.', 'start': 1856.259, 'duration': 4.144}], 'summary': 'The index page model is named the same, serving as a code behind, but in a completely different format from classic asp.net.', 'duration': 27.795, 'max_score': 1832.608, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1832608.jpg'}, {'end': 1939.39, 'src': 'embed', 'start': 1913.502, 'weight': 8, 'content': [{'end': 1924.625, 'text': 'Now there are some rules on how razor pages framework matches URL to files and how rules can be customized to give different results if needed.', 'start': 1913.502, 'duration': 11.123}, {'end': 1929.686, 'text': 'The first rule is that razor pages needs a root folder.', 'start': 1926.004, 'duration': 3.682}, {'end': 1939.39, 'text': 'By default, the folder has been named pages and its location is inside the root folder of the web application project.', 'start': 1930.626, 'duration': 8.764}], 'summary': "Razor pages framework matches url to files using default 'pages' folder.", 'duration': 25.888, 'max_score': 1913.502, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1913502.jpg'}, {'end': 2119.185, 'src': 'embed', 'start': 2086.032, 'weight': 9, 'content': [{'end': 2090.373, 'text': 'And inside that it will try to find index dot c s HTML.', 'start': 2086.032, 'duration': 4.341}, {'end': 2093.795, 'text': 'So we have few examples here for routing.', 'start': 2091.014, 'duration': 2.781}, {'end': 2095.775, 'text': "Let's see this in action.", 'start': 2094.275, 'duration': 1.5}, {'end': 2099.478, 'text': "Let's go to our project and run the application.", 'start': 2096.376, 'duration': 3.102}, {'end': 2106.78, 'text': 'In here you can see the URL is localhost and we do not have anything else.', 'start': 2101.658, 'duration': 5.122}, {'end': 2111.282, 'text': 'So that means by default it is loading the index page.', 'start': 2107.62, 'duration': 3.662}, {'end': 2119.185, 'text': 'If we go back to our application, solution explorer, double click index, you can see the text is welcome.', 'start': 2112.002, 'duration': 7.183}], 'summary': 'Demonstrating routing in action, accessing index page with default url.', 'duration': 33.153, 'max_score': 2086.032, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I2086032.jpg'}], 'start': 1183.343, 'title': 'Asp.net core 3 updates and project file changes', 'summary': 'Covers changes in the csproj file, asp.net core updates, discontinuation of meta package, migration of packages to nuget, and razor pages framework overview.', 'chapters': [{'end': 1283.675, 'start': 1183.343, 'title': 'Asp.net core 3 project file', 'summary': 'Explains the changes in the csproj file in asp.net core 3, including its format and usage, with a focus on adding and removing packages through nuget package manager, demonstrating the impact on the project file.', 'duration': 100.332, 'highlights': ['The csproj file in ASP.NET Core 3 replaces the project.json and xproj files from earlier versions.', 'The target framework in the csproj file is netcore app 3.0.', 'Adding a package through NuGet package manager results in the addition of a package reference entry in the project file.']}, {'end': 1771.373, 'start': 1284.515, 'title': 'Asp.net core updates and project structure overview', 'summary': 'Discusses the updates in asp.net core, including the discontinuation of the meta package, its integration into the .net core class library, the automatic installation of the meta package when installing .net core, the migration of packages like entity framework core to their own nuget package, and the overview of the cs proj file, properties, and www root folder structure.', 'duration': 486.858, 'highlights': ['The meta package has been discontinued and is now a part of the .NET Core class library, automatically updated with the .NET Core version.', 'Entity Framework Core has been moved to its own NuGet package, separate from the meta package.', 'The www root folder is where all static files like images, CSS, JavaScript, and static HTML should be placed for the website, emphasizing the separation between code files and static files.', 'The pages folder inside the Razor project contains all the pages for the website, including reusable partial views and the definition of tag helpers in the view import file.']}, {'end': 2166.089, 'start': 1771.733, 'title': 'Razor pages framework overview', 'summary': 'Discusses how the razor pages framework matches urls to files, the structure of razor pages, and the page model as the code behind for the index page, highlighting the default rules for mapping urls to pages and examples of url routing in the application.', 'duration': 394.356, 'highlights': ['The page model as the code behind for the index page', 'Default rules for mapping URLs to pages', 'Examples of URL routing in the application']}], 'duration': 982.746, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I1183343.jpg', 'highlights': ['The csproj file in ASP.NET Core 3 replaces project.json and xproj files.', 'The target framework in the csproj file is netcore app 3.0.', 'Adding a package through NuGet results in a package reference entry in the project file.', 'The meta package has been discontinued and is now part of the .NET Core class library.', 'Entity Framework Core has been moved to its own NuGet package, separate from the meta package.', 'The www root folder is where all static files should be placed for the website.', 'The pages folder inside the Razor project contains all the pages for the website.', 'The page model serves as the code behind for the index page.', 'Default rules for mapping URLs to pages are defined.', 'Examples of URL routing in the application are provided.']}, {'end': 3460.962, 'segs': [{'end': 2252.389, 'src': 'embed', 'start': 2225.677, 'weight': 3, 'content': [{'end': 2235.165, 'text': 'was so important to the adoption of ASP.NET Core and because of which they decided to create Tag Helpers from grounds up.', 'start': 2225.677, 'duration': 9.488}, {'end': 2245.194, 'text': 'Tag Helpers enable server side code to participate in creating and rendering HTML elements inside the razor files.', 'start': 2236.386, 'duration': 8.808}, {'end': 2252.389, 'text': 'Though there are similarities between Angular directives and tag helpers, there is a major difference.', 'start': 2246.4, 'duration': 5.989}], 'summary': 'Tag helpers in asp.net core facilitate server-side code participation in html rendering.', 'duration': 26.712, 'max_score': 2225.677, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I2225677.jpg'}, {'end': 2492.374, 'src': 'embed', 'start': 2461.454, 'weight': 2, 'content': [{'end': 2467.176, 'text': "So right here, we'll go to Solution Explorer, and we have the program.cs.", 'start': 2461.454, 'duration': 5.722}, {'end': 2470.577, 'text': 'In here, you see we have a main method.', 'start': 2468.196, 'duration': 2.381}, {'end': 2481.14, 'text': 'Here, the configuration is done by calling create host builder, which is a method in the program class that returns I host builder.', 'start': 2471.557, 'duration': 9.583}, {'end': 2485.453, 'text': 'On that object, build and run is called.', 'start': 2482.572, 'duration': 2.881}, {'end': 2492.374, 'text': 'And from that point onwards, this application has become an ASP.NET Core application.', 'start': 2486.113, 'duration': 6.261}], 'summary': 'Configuring an asp.net core application using create host builder in program.cs.', 'duration': 30.92, 'max_score': 2461.454, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I2461454.jpg'}, {'end': 2667.064, 'src': 'embed', 'start': 2641.179, 'weight': 0, 'content': [{'end': 2646.523, 'text': 'So do not worry, it should look like this, you will only have the ad razor pages.', 'start': 2641.179, 'duration': 5.344}, {'end': 2652.608, 'text': 'And this is because when we created the project, we selected that we want the razor pages.', 'start': 2647.023, 'duration': 5.585}, {'end': 2655.911, 'text': 'The other method is the configure method.', 'start': 2653.388, 'duration': 2.523}, {'end': 2661.277, 'text': 'And here this method is used to configure the HTTP request pipeline.', 'start': 2656.291, 'duration': 4.986}, {'end': 2667.064, 'text': 'The pipeline specifies how the application should respond to HTTP requests.', 'start': 2661.798, 'duration': 5.266}], 'summary': 'Project uses ad razor pages for http requests configuration.', 'duration': 25.885, 'max_score': 2641.179, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I2641179.jpg'}, {'end': 2729.992, 'src': 'embed', 'start': 2692.76, 'weight': 1, 'content': [{'end': 2696.502, 'text': "Let's consider few of the middlewares that we can add in a pipeline.", 'start': 2692.76, 'duration': 3.742}, {'end': 2703.284, 'text': 'One of them can be MVC and then we can also add authentication and static files.', 'start': 2697.342, 'duration': 5.942}, {'end': 2711.946, 'text': 'You should notice that when we add authentication middleware, it should be done before we add MVC and the order is important.', 'start': 2703.944, 'duration': 8.002}, {'end': 2718.608, 'text': 'The reason is we do not want to load MVC and then find out that user is not authenticated.', 'start': 2712.706, 'duration': 5.902}, {'end': 2729.992, 'text': 'We also have to configure a middleware for static files in our project like HTML files, images, CSS or JavaScript files.', 'start': 2720.049, 'duration': 9.943}], 'summary': 'Consider adding mvc, authentication, and static file middlewares in the correct order for project setup.', 'duration': 37.232, 'max_score': 2692.76, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I2692760.jpg'}], 'start': 2166.83, 'title': 'Asp.net core concepts', 'summary': 'Covers routing, tag helpers, startup process, dependency injection, middleware, pipeline, and their roles in asp.net core. it highlights the revamped startup process, the concept of asp.net core pipeline, and the usage of middleware in application configuration.', 'chapters': [{'end': 2402.359, 'start': 2166.83, 'title': 'Routing and tag helpers in asp.net core', 'summary': 'Explains the routing mechanism in asp.net core and introduces tag helpers, highlighting their distinction from html helpers and the similarities between tag helpers and angular directives.', 'duration': 235.529, 'highlights': ['The chapter explains the routing mechanism in ASP.NET Core and introduces Tag Helpers, highlighting their distinction from HTML helpers and the similarities between Tag Helpers and Angular directives.', 'Tag Helpers enable server side code to participate in creating and rendering HTML elements inside the razor files, offering a more natural and focused approach around HTML elements, as well as allowing the use of regular HTML tags with the addition of tag helpers.', 'Microsoft implemented Tag Helpers based on the success of other libraries like AngularJS and React, emphasizing the importance of server-side rendering in the adoption of ASP.NET Core.']}, {'end': 2640.759, 'start': 2404.266, 'title': 'Asp.net core startup process', 'summary': 'Explains the revamped startup process in asp.net core, now involving the program class, the main method as the entry point, and the configuration of services and the web host, with a focus on dependency injection and the startup class file.', 'duration': 236.493, 'highlights': ['The program class contains a main method, the entry point for the application, configuring ASP.NET Core and starting it, while CreateHostBuilder calls CreateDefaultBuilder to configure the web host using defaults.', 'The configure services method in the startup class file is used to add services to the container, configuring dependency injection, an integral part of ASP.NET Core, with examples such as entity framework core, identity service, and MVC.', 'In classic ASP.NET, the system.webassembly started the application, while in ASP.NET Core, the steps for startup are determined by the program class containing the main method as the entry point.']}, {'end': 2904.499, 'start': 2641.179, 'title': 'Understanding asp.net core pipeline', 'summary': 'Explains the concept of asp.net core pipeline, which is composed of middlewares, and its role in handling http requests with middlewares like mvc, authentication, and static files, making the process more efficient and allowing asp.net core applications to run on different web servers and operating systems.', 'duration': 263.32, 'highlights': ['The ASP.NET Core pipeline is composed of individual parts called middlewares, such as MVC, authentication, and static files, which are added in a specific order to handle HTTP requests efficiently.', 'The ASP.NET Core pipeline approach is more efficient than the old system dot web approach, as it allows plugging in only the necessary middlewares and enables ASP.NET Core applications to run on different web servers and operating systems.', 'Requests from the external web server are passed to the internal web server, with Kestrel being the common internal web server for ASP.NET Core, and the response is routed back to the external web server to produce the final response on the browser.', 'The ASP.NET Core pipeline specifies how the application should respond to HTTP requests and is configured using methods like ad razor pages and the configure method, with the latter used to configure the HTTP request pipeline.', "The ASP.NET Core pipeline involves the web server invoking the dotnet runtime, loading the CLR, finding the entry point in the application's main method, and processing the request through middlewares to generate the response."]}, {'end': 3460.962, 'start': 2904.499, 'title': 'Asp.net core middleware and pipeline overview', 'summary': 'Provides an overview of middleware and pipeline in asp.net core, explaining the configuration of multiple middlewares within the application and the concept of request pipeline. it also covers the usage of app settings dot json file and dependency injection in asp.net core.', 'duration': 556.463, 'highlights': ['Configuring request pipeline with multiple middlewares within the application', 'Explanation of middleware and pipeline in ASP.NET Core', 'Overview of app settings dot JSON file and its usage for application settings', 'Introduction to dependency injection in ASP.NET Core and its benefits']}], 'duration': 1294.132, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I2166830.jpg', 'highlights': ['The ASP.NET Core pipeline specifies how the application should respond to HTTP requests and is configured using methods like ad razor pages and the configure method, with the latter used to configure the HTTP request pipeline.', 'The ASP.NET Core pipeline is composed of individual parts called middlewares, such as MVC, authentication, and static files, which are added in a specific order to handle HTTP requests efficiently.', 'The program class contains a main method, the entry point for the application, configuring ASP.NET Core and starting it, while CreateHostBuilder calls CreateDefaultBuilder to configure the web host using defaults.', 'Tag Helpers enable server side code to participate in creating and rendering HTML elements inside the razor files, offering a more natural and focused approach around HTML elements, as well as allowing the use of regular HTML tags with the addition of tag helpers.']}, {'end': 4376.707, 'segs': [{'end': 3566.241, 'src': 'embed', 'start': 3540.302, 'weight': 0, 'content': [{'end': 3549.668, 'text': 'Rather than creating a new object in individual pages, it is created and registered in the container, we only have to use this.', 'start': 3540.302, 'duration': 9.366}, {'end': 3559.634, 'text': 'This way container deals with creating, registering and disposing of the objects rather than creating them in every page.', 'start': 3550.728, 'duration': 8.906}, {'end': 3566.241, 'text': 'This is how efficient dependency injection is compared to the classic approach.', 'start': 3560.72, 'duration': 5.521}], 'summary': 'Efficient dependency injection reduces object creation in every page.', 'duration': 25.939, 'max_score': 3540.302, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I3540302.jpg'}, {'end': 3707.756, 'src': 'embed', 'start': 3678.28, 'weight': 1, 'content': [{'end': 3688.249, 'text': 'Inside the Browse tab, we will search for Microsoft.asbnetcore.mvc.razor.RuntimeCompilation.', 'start': 3678.28, 'duration': 9.969}, {'end': 3693.975, 'text': 'We have to install this package inside our Booklist Razor project.', 'start': 3689.21, 'duration': 4.765}, {'end': 3696.468, 'text': "we'll accept this.", 'start': 3695.407, 'duration': 1.061}, {'end': 3704.513, 'text': 'And once the installation is complete, we need to make one change inside our startup.cs class file.', 'start': 3697.549, 'duration': 6.964}, {'end': 3707.756, 'text': 'And we have the configure services method.', 'start': 3705.114, 'duration': 2.642}], 'summary': 'Install microsoft.asbnetcore.mvc.razor.runtimecompilation in booklist razor project and make configuration changes in startup.cs.', 'duration': 29.476, 'max_score': 3678.28, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I3678280.jpg'}, {'end': 3796.048, 'src': 'embed', 'start': 3768.63, 'weight': 3, 'content': [{'end': 3774.774, 'text': 'We make changes, we come back and we want to see the change rather than restarting the application.', 'start': 3768.63, 'duration': 6.144}, {'end': 3780.998, 'text': 'In this video, what we will do is we will be adding our first model.', 'start': 3776.932, 'duration': 4.066}, {'end': 3785.825, 'text': 'Now models represents any table that you want in your database.', 'start': 3781.899, 'duration': 3.926}, {'end': 3791.433, 'text': 'In this project, what we want to do is we want to manage a list of books.', 'start': 3786.666, 'duration': 4.767}, {'end': 3796.048, 'text': 'So for that, we will add a model or a table called book.', 'start': 3792.426, 'duration': 3.622}], 'summary': 'Adding first model to manage a list of books.', 'duration': 27.418, 'max_score': 3768.63, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I3768630.jpg'}, {'end': 3975.438, 'src': 'embed', 'start': 3943.076, 'weight': 4, 'content': [{'end': 3944.017, 'text': "Let's install this.", 'start': 3943.076, 'duration': 0.941}, {'end': 3953.583, 'text': "These are all the entity framework packages that we are needing because we'll be using entity framework to access database.", 'start': 3946.318, 'duration': 7.265}, {'end': 3956.725, 'text': 'After this, we need dot SQL Server.', 'start': 3954.383, 'duration': 2.342}, {'end': 3959.853, 'text': "So we'll search for that.", 'start': 3958.553, 'duration': 1.3}, {'end': 3962.074, 'text': "And we'll be using SQL Server.", 'start': 3960.294, 'duration': 1.78}, {'end': 3964.535, 'text': "So we'll add this package as well.", 'start': 3962.614, 'duration': 1.921}, {'end': 3971.897, 'text': "And the final package that we'll need is entity framework core dot tools.", 'start': 3967.496, 'duration': 4.401}, {'end': 3975.438, 'text': "And this is required because we'll be running migrations.", 'start': 3972.457, 'duration': 2.981}], 'summary': 'Installing entity framework and sql server packages for database access and migrations.', 'duration': 32.362, 'max_score': 3943.076, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I3943076.jpg'}, {'end': 4149.372, 'src': 'embed', 'start': 4121.774, 'weight': 2, 'content': [{'end': 4130.621, 'text': "Now that we have the connection string inside app settings dot JSON, it's time to configure our configure services with entity framework.", 'start': 4121.774, 'duration': 8.847}, {'end': 4137.365, 'text': 'In order to configure that we need application DB context or a DB context class.', 'start': 4131.161, 'duration': 6.204}, {'end': 4144.49, 'text': 'So that class we can add inside Solution Explorer model, right click, add a new class.', 'start': 4138.185, 'duration': 6.305}, {'end': 4148.272, 'text': "We'll call this class application DB context.", 'start': 4145.33, 'duration': 2.942}, {'end': 4149.372, 'text': "Let's add this.", 'start': 4148.631, 'duration': 0.741}], 'summary': 'Configure entity framework with application db context.', 'duration': 27.598, 'max_score': 4121.774, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I4121774.jpg'}], 'start': 3462.002, 'title': 'Implementing dependency injection, adding book model, and configuring sql server', 'summary': 'Introduces dependency injection, demonstrating its efficiency compared to classic object creation and registration, and explains the need for installing microsoft.asbnetcore.mvc.razor.runtimecompilation package. it also covers adding a book model for managing a list of books in a database, setting up necessary packages such as microsoft entity framework core and sql server, and configuring sql server connection and adding entity framework to the application.', 'chapters': [{'end': 3768.23, 'start': 3462.002, 'title': 'Dependency injection in coding', 'summary': 'Introduces the concept of dependency injection in coding, highlighting its efficiency compared to the classic approach of object creation and registration, and demonstrates the need for installing the microsoft.asbnetcore.mvc.razor.runtimecompilation package for auto-refreshing the view in asp.net core 3.', 'duration': 306.228, 'highlights': ['Dependency injection allows for efficient object creation and registration, reducing redundancy and improving reusability.', 'Introduction to the need for installing the Microsoft.asbnetcore.mvc.razor.RuntimeCompilation package for auto-refreshing the view in ASP.NET Core 3.']}, {'end': 4000.147, 'start': 3768.63, 'title': 'Adding book model and setting up database', 'summary': "Covers adding the first model 'book' to manage a list of books in a database, including setting up the necessary packages for entity framework such as microsoft entity framework core and sql server, and explaining the purpose of migrations.", 'duration': 231.517, 'highlights': ["The chapter covers adding the first model 'book' to manage a list of books in a database.", 'In order to set up the database, the necessary packages for entity framework such as Microsoft Entity Framework Core, SQL Server, and Entity Framework Core tools need to be installed.', 'The purpose of migrations will be explained in the next video.']}, {'end': 4376.707, 'start': 4001.008, 'title': 'Configuring sql server and entity framework', 'summary': 'Covers configuring sql server connection and adding entity framework to the application, including steps to add connection string, application db context, and pushing the changes to the database.', 'duration': 375.699, 'highlights': ['The chapter covers configuring SQL Server connection and adding Entity Framework to the application, including steps to add connection string, application DB context, and pushing the changes to the database.', 'The default server name for SQL Server is local DB in bracket backwards slash Ms SQL local DB.', 'The process involves adding a connection string inside app settings dot JSON, ensuring alignment of the server name, and creating a new database called book list razor.', 'The chapter also includes implementing application DB context by inheriting from dbContext class, adding the book model to the database, and configuring the DB context inside startup.cs.', 'The process also involves using the configuration object to pass the connection string from app settings dot JSON and pushing the changes to the database using the add migration command.']}], 'duration': 914.705, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I3462002.jpg', 'highlights': ['Dependency injection reduces redundancy and improves reusability', 'Installing Microsoft.asbnetcore.mvc.razor.RuntimeCompilation package for auto-refreshing the view', 'Configuring SQL Server connection and adding Entity Framework to the application', "Adding the first model 'book' to manage a list of books in a database", 'Necessary packages for entity framework such as Microsoft Entity Framework Core, SQL Server, and Entity Framework Core tools need to be installed']}, {'end': 5300.767, 'segs': [{'end': 4408.105, 'src': 'embed', 'start': 4378.327, 'weight': 0, 'content': [{'end': 4382.449, 'text': 'So this is the perfect script that is needed to create the book table.', 'start': 4378.327, 'duration': 4.122}, {'end': 4387.81, 'text': 'Now right now only script has been created with the Add migration command.', 'start': 4383.429, 'duration': 4.381}, {'end': 4397.299, 'text': 'How do we actually create the database and create the table? For that we have a command called update database.', 'start': 4388.491, 'duration': 8.808}, {'end': 4402.322, 'text': 'Once you hit update database, it will check if the database exists.', 'start': 4398.239, 'duration': 4.083}, {'end': 4408.105, 'text': 'If it does not, it will create the database and it will also push the migrations.', 'start': 4402.882, 'duration': 5.223}], 'summary': "The script creates a book table. 'add migration' and 'update database' commands are used to create the table and database.", 'duration': 29.778, 'max_score': 4378.327, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I4378327.jpg'}, {'end': 4706.652, 'src': 'embed', 'start': 4680.397, 'weight': 1, 'content': [{'end': 4689.342, 'text': "So we'll say public I enumerable of book, let's call this books, we'll have the getter and setter.", 'start': 4680.397, 'duration': 8.945}, {'end': 4695.485, 'text': "What we will do is we'll assign this books, all of the books from the database.", 'start': 4690.602, 'duration': 4.883}, {'end': 4701.208, 'text': "How do we get that? It's very simple because we're using entity framework.", 'start': 4696.465, 'duration': 4.743}, {'end': 4706.652, 'text': "We'll use await here and we'll say underscore DB dot books.", 'start': 4701.909, 'duration': 4.743}], 'summary': 'Using entity framework, assigning all books from the database to a public enumerable property.', 'duration': 26.255, 'max_score': 4680.397, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I4680397.jpg'}, {'end': 5061.323, 'src': 'embed', 'start': 5034.195, 'weight': 2, 'content': [{'end': 5039.537, 'text': 'Within this form, we want to display this only if books exist inside the table.', 'start': 5034.195, 'duration': 5.342}, {'end': 5044.058, 'text': 'So we can use razor syntax here like if else condition.', 'start': 5040.157, 'duration': 3.901}, {'end': 5051.3, 'text': 'For that you need at sign and then you can use C sharp syntax like if,', 'start': 5044.918, 'duration': 6.382}, {'end': 5056.221, 'text': 'and we want to check if there are any books that are returned from this get method.', 'start': 5051.3, 'duration': 4.921}, {'end': 5061.323, 'text': 'You can see inside the page model we have the I enumerable as book.', 'start': 5057.022, 'duration': 4.301}], 'summary': 'Use razor syntax to display books from table in form', 'duration': 27.128, 'max_score': 5034.195, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I5034195.jpg'}], 'start': 4378.327, 'title': 'Setting up database and displaying book data', 'summary': 'Covers creating a book table and database with entity framework, including commands for migration and database updates. it also explains dependency injection and async/await in .net core for retrieving and displaying a list of books, and using razor syntax to display book details in a web application.', 'chapters': [{'end': 4656.535, 'start': 4378.327, 'title': 'Creating book table and database', 'summary': 'Details the process of creating a book table and database using entity framework, including commands to add migration, update the database, and the usage of application db context for crud operations.', 'duration': 278.208, 'highlights': ["The 'Add migration' command is used to create the script for the book table, and the 'Update database' command is used to create the database and push the migrations, ensuring the creation of the book table and database.", "After successfully running the 'Update database' command, the book table with the specified properties is created, and CRUD operations can be performed on the book object.", 'The usage of application DB context for database operations involves adding it to the pipeline and accessing it using dependency injection, enabling the retrieval of all books from the database for display on the page.']}, {'end': 5033.083, 'start': 4657.716, 'title': 'Dependency injection and entity framework in .net core', 'summary': 'Explains the use of dependency injection and async/await in .net core to retrieve and display a list of books from a database using entity framework, and demonstrates the design process of the book list page in a web application.', 'duration': 375.367, 'highlights': ['Using async/await and Entity Framework, the chapter demonstrates retrieving all books from the database and storing them in an IEnumerable, facilitating their availability for display inside the view.', 'The explanation of using dependency injection eliminates the need to create and dispose of objects manually, providing a more efficient and manageable process for handling dependencies.', 'Demonstration of manipulating routing for ASP page tag helpers inside the underscore layout is provided, showcasing the required changes to access content within the book list.']}, {'end': 5300.767, 'start': 5034.195, 'title': 'Display books with razor syntax', 'summary': 'Explains how to use razor syntax in a razor page to display a table of books retrieved from the database, including using if else condition to check for existing books, adding table with bootstrap classes, using tag helpers and html helpers to display book details, and using for each loop to display all book records.', 'duration': 266.572, 'highlights': ['The page demonstrates the use of razor syntax to display a table of books based on the existence of books in the database, using if else condition to check the count of returned books, and displaying a table or a message accordingly.', 'The chapter covers the addition of a table with bootstrap classes and the utilization of tag helpers and HTML helpers to display book details such as name and author, highlighting the simplicity and preference for tag helpers over HTML helpers.', 'The explanation includes the implementation of a for each loop in the view using razor syntax to iterate through the book records and display them in a table row, with the use of HTML helper for displaying book details without an equivalent tag helper.']}], 'duration': 922.44, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I4378327.jpg', 'highlights': ["The 'Add migration' command creates the script for the book table and 'Update database' command creates the database and pushes the migrations", 'Using async/await and Entity Framework to retrieve all books from the database and store them in an IEnumerable', 'Demonstrating the use of razor syntax to display a table of books based on the existence of books in the database']}, {'end': 5989.094, 'segs': [{'end': 5365.117, 'src': 'embed', 'start': 5301.308, 'weight': 1, 'content': [{'end': 5303.789, 'text': 'But that is beyond the scope for this project.', 'start': 5301.308, 'duration': 2.481}, {'end': 5306.89, 'text': 'So we can just use the HTML helper.', 'start': 5304.469, 'duration': 2.421}, {'end': 5313.21, 'text': "We can copy this and we'll paste it again for author.", 'start': 5308.206, 'duration': 5.004}, {'end': 5315.071, 'text': 'Let me save this.', 'start': 5314.03, 'duration': 1.041}, {'end': 5317.392, 'text': "Let's go back and refresh.", 'start': 5315.371, 'duration': 2.021}, {'end': 5319.894, 'text': 'And we should see our record.', 'start': 5318.053, 'duration': 1.841}, {'end': 5322.236, 'text': 'Perfect This was so easy.', 'start': 5320.655, 'duration': 1.581}, {'end': 5324.798, 'text': 'Now this is not aligned.', 'start': 5323.417, 'duration': 1.381}, {'end': 5330.081, 'text': 'So we can do Ctrl A Ctrl KD to align everything that we have.', 'start': 5324.838, 'duration': 5.243}, {'end': 5336.246, 'text': 'Last thing that I want is in here I want buttons to edit or delete a book.', 'start': 5331.522, 'duration': 4.724}, {'end': 5340.693, 'text': 'So after this TD, I will add another TD.', 'start': 5337.17, 'duration': 3.523}, {'end': 5344.256, 'text': 'And I will give button give it a class.', 'start': 5341.534, 'duration': 2.722}, {'end': 5351.002, 'text': 'Give it a class of BTN, BTN danger, and BTN small.', 'start': 5345.858, 'duration': 5.144}, {'end': 5353.264, 'text': 'These are all bootstrap classes.', 'start': 5351.262, 'duration': 2.002}, {'end': 5356.267, 'text': 'And I will display delete.', 'start': 5354.165, 'duration': 2.102}, {'end': 5362.436, 'text': 'After the Delete button, we need a link to redirect to the Edit page.', 'start': 5357.674, 'duration': 4.762}, {'end': 5365.117, 'text': "So for that, we'll use the anchor tag.", 'start': 5362.976, 'duration': 2.141}], 'summary': 'Using html helper, aligned content, added delete and edit buttons.', 'duration': 63.809, 'max_score': 5301.308, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I5301308.jpg'}, {'end': 5484.691, 'src': 'embed', 'start': 5453.51, 'weight': 3, 'content': [{'end': 5457.432, 'text': "Inside the booklist, we'll right click, add a razor page.", 'start': 5453.51, 'duration': 3.922}, {'end': 5459.713, 'text': 'Again, it will be the basic one.', 'start': 5458.012, 'duration': 1.701}, {'end': 5463.896, 'text': "And we'll say create here, it won't be a partial view.", 'start': 5460.534, 'duration': 3.362}, {'end': 5465.097, 'text': "Let's add this.", 'start': 5464.376, 'duration': 0.721}, {'end': 5469.366, 'text': 'Now with the create page, when the page will be loaded.', 'start': 5466.365, 'duration': 3.001}, {'end': 5471.167, 'text': 'do we want to display any data??', 'start': 5469.366, 'duration': 1.801}, {'end': 5477.449, 'text': 'No, we just want to display text box, so user can enter a book name and an author.', 'start': 5471.747, 'duration': 5.702}, {'end': 5484.691, 'text': 'So for that right here, we will again need the application DB context not for the get handler.', 'start': 5478.449, 'duration': 6.242}], 'summary': 'Add a basic razor page to the booklist, allowing users to enter book name and author.', 'duration': 31.181, 'max_score': 5453.51, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I5453510.jpg'}, {'end': 5657.652, 'src': 'embed', 'start': 5624.281, 'weight': 0, 'content': [{'end': 5632.988, 'text': "And now we know how we can make changes to a model that we have already added, we'll have to change our index for the same.", 'start': 5624.281, 'duration': 8.707}, {'end': 5645.627, 'text': "I'll just copy this and paste it one more time and remove the display for here we'll have the ISBN and we'll do the same for HTML helper.", 'start': 5634.102, 'duration': 11.525}, {'end': 5651.289, 'text': 'Perfect So these are all the changes that were needed.', 'start': 5648.328, 'duration': 2.961}, {'end': 5657.652, 'text': "In the next video, let's design the Create page and see everything in action.", 'start': 5652.27, 'duration': 5.382}], 'summary': 'Demonstrated making changes to a model, including adding and removing display elements. next, planning to design create page in the next video.', 'duration': 33.371, 'max_score': 5624.281, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I5624281.jpg'}, {'end': 5962.529, 'src': 'embed', 'start': 5908.726, 'weight': 4, 'content': [{'end': 5914.109, 'text': 'And that is because inside the create page model, we do not have a post handler.', 'start': 5908.726, 'duration': 5.383}, {'end': 5921.735, 'text': "So let's see how we can add a post handler so that whenever they submit anything from the page,", 'start': 5915.09, 'duration': 6.645}, {'end': 5925.678, 'text': 'how do we get the data and save that inside our database?', 'start': 5921.735, 'duration': 3.943}, {'end': 5935.756, 'text': 'In this video, we need to make sure when we fill all of this information and hit the Create button, it takes us back to the page.', 'start': 5927.492, 'duration': 8.264}, {'end': 5938.938, 'text': 'But before that, we need some validation.', 'start': 5936.537, 'duration': 2.401}, {'end': 5942.46, 'text': 'As you know, name was a required property.', 'start': 5939.878, 'duration': 2.582}, {'end': 5948.243, 'text': 'So if you hit Create before pressing the name, we want to see the error message right here.', 'start': 5942.96, 'duration': 5.283}, {'end': 5950.424, 'text': "We'll do all of that.", 'start': 5949.163, 'duration': 1.261}, {'end': 5951.964, 'text': "Let's stop the application.", 'start': 5950.544, 'duration': 1.42}, {'end': 5954.506, 'text': "And let's go to the page model.", 'start': 5952.865, 'duration': 1.641}, {'end': 5958.247, 'text': 'Right here we have the on get handler.', 'start': 5955.666, 'duration': 2.581}, {'end': 5962.529, 'text': 'But when we hit the Submit button, we will be posting data.', 'start': 5959.027, 'duration': 3.502}], 'summary': 'Adding post handler for form submission and implementing validation for required properties in page model.', 'duration': 53.803, 'max_score': 5908.726, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I5908726.jpg'}], 'start': 5301.308, 'title': 'Creating index and razor pages for book management', 'summary': 'Covers creating an index page using html helper to manage books, including adding edit/delete buttons and aligning elements, and creating a razor page for adding books with link creation, design, validation, and post handling.', 'chapters': [{'end': 5398.607, 'start': 5301.308, 'title': 'Creating index page for book management', 'summary': 'Outlines the process of creating an index page for book management using html helper, including adding buttons to edit or delete a book and aligning the elements, with a focus on ease and efficiency.', 'duration': 97.299, 'highlights': ['The process involves using HTML helper to create an index page for book management, making the task efficient and straightforward.', 'The addition of buttons for editing or deleting a book, along with the use of bootstrap classes such as BTN danger and BTN success, enhances the functionality and visual appeal of the page.', 'The need for aligning elements is addressed through the use of Ctrl A Ctrl KD, ensuring a visually cohesive layout for the index page.']}, {'end': 5989.094, 'start': 5399.688, 'title': 'Creating razor page for adding books', 'summary': 'Covers the process of creating a razor page for adding books, including adding a link on the index page, designing the create razor page, adding validation for required properties, and creating a post handler for submitting data to the database.', 'duration': 589.406, 'highlights': ['The chapter covers the process of creating a Razor page for adding books', 'Adding validation for required properties', 'Creating a post handler for submitting data to the database']}], 'duration': 687.786, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I5301308.jpg', 'highlights': ['The process involves using HTML helper to create an index page for book management, making the task efficient and straightforward.', 'The addition of buttons for editing or deleting a book, along with the use of bootstrap classes such as BTN danger and BTN success, enhances the functionality and visual appeal of the page.', 'The need for aligning elements is addressed through the use of Ctrl A Ctrl KD, ensuring a visually cohesive layout for the index page.', 'The chapter covers the process of creating a Razor page for adding books', 'Adding validation for required properties', 'Creating a post handler for submitting data to the database']}, {'end': 7374.574, 'segs': [{'end': 6040.023, 'src': 'embed', 'start': 6012.712, 'weight': 1, 'content': [{'end': 6021.456, 'text': 'Rather than writing this ASP dotnet core team has given a property binding here where you have to write bind property.', 'start': 6012.712, 'duration': 8.744}, {'end': 6029.419, 'text': 'Once you bind the property, it is automatically assumed that on the post, you will be getting this book right here.', 'start': 6022.416, 'duration': 7.003}, {'end': 6040.023, 'text': 'So that way, all you have to do is right here, you can check if model state dot is valid, then proceed further.', 'start': 6030.396, 'duration': 9.627}], 'summary': 'Asp dotnet core team introduces property binding for easier post handling.', 'duration': 27.311, 'max_score': 6012.712, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I6012712.jpg'}, {'end': 6130.841, 'src': 'embed', 'start': 6098.533, 'weight': 2, 'content': [{'end': 6103.497, 'text': 'Only when this command is executed, then the data will be pushed to the database.', 'start': 6098.533, 'duration': 4.964}, {'end': 6112.232, 'text': 'And once the changes are pushed to the database, all that is remaining is return, we will redirect to a page.', 'start': 6104.508, 'duration': 7.724}, {'end': 6115.613, 'text': 'And that page will be the index page.', 'start': 6113.152, 'duration': 2.461}, {'end': 6117.815, 'text': 'This looks good.', 'start': 6116.994, 'duration': 0.821}, {'end': 6121.316, 'text': "Let's run our application and see this in action.", 'start': 6118.115, 'duration': 3.201}, {'end': 6128.22, 'text': "So we'll go to book, we'll try to create a new book.", 'start': 6125.138, 'duration': 3.082}, {'end': 6130.841, 'text': "And let's hit the Create button.", 'start': 6129.2, 'duration': 1.641}], 'summary': 'Executing a command pushes data to the database, then redirects to the index page.', 'duration': 32.308, 'max_score': 6098.533, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I6098533.jpg'}, {'end': 6400.052, 'src': 'embed', 'start': 6372.67, 'weight': 0, 'content': [{'end': 6377.772, 'text': 'So this means the validation here is done on the client side without posting back.', 'start': 6372.67, 'duration': 5.102}, {'end': 6383.814, 'text': 'So that way we have both the validation server side, as well as client side.', 'start': 6378.692, 'duration': 5.122}, {'end': 6392.348, 'text': 'So this was one way I wanted to show you that the validation should be done both client side as well as server side.', 'start': 6384.764, 'duration': 7.584}, {'end': 6395.49, 'text': 'Now the create is completed.', 'start': 6393.629, 'duration': 1.861}, {'end': 6400.052, 'text': "In the next video, let's start working on the Edit functionality.", 'start': 6395.79, 'duration': 4.262}], 'summary': 'Validation done on client & server side, create completed, next working on edit functionality.', 'duration': 27.382, 'max_score': 6372.67, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I6372670.jpg'}, {'end': 6971.677, 'src': 'embed', 'start': 6943.881, 'weight': 3, 'content': [{'end': 6946.661, 'text': 'And on the Delete button, you can do a post event.', 'start': 6943.881, 'duration': 2.78}, {'end': 6949.202, 'text': 'But I want to try something new here.', 'start': 6947.141, 'duration': 2.061}, {'end': 6953.303, 'text': 'This time when we hit Delete, I want to show an alert.', 'start': 6950.002, 'duration': 3.301}, {'end': 6958.644, 'text': 'And when the user clicks OK, I want to delete it directly from the index page.', 'start': 6953.743, 'duration': 4.901}, {'end': 6966.575, 'text': "So for that, let's implement the pop up first, we'll go back, I'll close edit, create.", 'start': 6959.713, 'duration': 6.862}, {'end': 6968.836, 'text': 'And we have the index.', 'start': 6967.576, 'duration': 1.26}, {'end': 6971.677, 'text': 'Right here we have the delete button.', 'start': 6969.536, 'duration': 2.141}], 'summary': 'Implement a pop-up on hitting delete, then delete directly from index page.', 'duration': 27.796, 'max_score': 6943.881, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I6943881.jpg'}, {'end': 7241.789, 'src': 'embed', 'start': 7210.461, 'weight': 4, 'content': [{'end': 7213.705, 'text': "we'll stop it, we'll have to go to underscore layout.", 'start': 7210.461, 'duration': 3.244}, {'end': 7221.013, 'text': "On top, we have the CSS, we'll paste it here for data tables, jQuery, UI and toaster.", 'start': 7214.286, 'duration': 6.727}, {'end': 7223.997, 'text': "And we'll also copy the JS.", 'start': 7221.935, 'duration': 2.062}, {'end': 7230.384, 'text': "And we'll scroll down to the JavaScript and we'll paste it right here.", 'start': 7225.679, 'duration': 4.705}, {'end': 7238.186, 'text': 'Now with data tables, we need to add API calls to retrieve all of the books in a JSON format.', 'start': 7231.522, 'duration': 6.664}, {'end': 7241.789, 'text': "And we'll also add an API call for delete.", 'start': 7238.927, 'duration': 2.862}], 'summary': 'Integrating css, jquery, and javascript for data tables, with api calls for retrieving and deleting books.', 'duration': 31.328, 'max_score': 7210.461, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7210461.jpg'}], 'start': 5990.195, 'title': 'Book object processing in razor page', 'summary': 'Discusses processing a book object in a razor page application, including property binding, model state validation, adding the book to the database, and redirecting to the index page after successful creation. it demonstrates debugging and implementing client-side validation, emphasizing the importance of both client-side and server-side validation for creating, editing, and updating a book. additionally, it covers implementing delete functionality with pop-up alerts for confirmation and the addition of styling and data tables using sweet alert, toasters, and data tables, along with api calls for retrieving and deleting data.', 'chapters': [{'end': 6154.367, 'start': 5990.195, 'title': 'Razor page book object processing', 'summary': 'Discusses processing a book object in a razor page, including property binding, model state validation, adding the book to the database, and redirecting to the index page after successful creation.', 'duration': 164.172, 'highlights': ['Property binding simplifies the retrieval of the book object in ASP.NET Core, eliminating the need to manually retrieve it.', 'Validating the model state is crucial before proceeding further, ensuring the data is valid before adding it to the database.', "Using underscore DB and 'add a sink' to add the book to the database, and then asynchronously saving the changes to push the data to the database.", 'Redirecting to the index page after successfully creating a book, while also highlighting the importance of required properties for successful creation.']}, {'end': 6372.03, 'start': 6154.867, 'title': 'Client-side validation implementation', 'summary': 'Demonstrates debugging and implementing client-side validation in an asp.net application, utilizing tag helpers and partials to display and handle error messages, resulting in error message display upon creating a new book and client-side validation implementation.', 'duration': 217.163, 'highlights': ['The model state is invalid due to required properties not receiving any value, requiring the addition of error messages to identify the issue.', 'Utilizing tag helpers and adding divs and spans to display individual error messages for book name, author, and ISBN.', 'Implementing client-side validation by referencing the validation scripts partial and ensuring the error message pops up without returning back upon creating a new book.', 'Demonstrating the debugging process and the need to shift the validation from server-side to client-side for improved user experience.']}, {'end': 6691.98, 'start': 6372.67, 'title': 'Client and server-side validation', 'summary': 'Discusses the importance of both client side and server side validation, demonstrated through creating and editing a book in a razor page application, with a focus on passing the id parameter and designing the edit view.', 'duration': 319.31, 'highlights': ['Client and server-side validation are essential, and their demonstration is emphasized through creating and editing a book in a razor page application.', 'The process includes passing the ID parameter to the Edit page using tag helpers, and retrieving the book based on the received ID.', 'The UI for editing the book is designed, with the focus on loading data and modifying the form action for the update functionality.', 'The importance of adding a post handler for the update functionality is highlighted, along with the need to validate the model state before processing the update request.']}, {'end': 6916.42, 'start': 6693.483, 'title': 'Updating book object in database', 'summary': 'Discusses updating a book object in the database, using await db to find and update the book by id, debugging a common error message related to null values in the object, and ensuring the presence of the id property in the hidden field for successful updates.', 'duration': 222.937, 'highlights': ["Using 'await DB' to find and update the book by ID", 'Debugging a common error message related to null values in the object', 'Ensuring the presence of the ID property in the hidden field for successful updates']}, {'end': 7374.574, 'start': 6917.26, 'title': 'Implementing delete functionality', 'summary': 'Discusses implementing the delete functionality in a web application, covering the use of pop-up alerts for confirmation and the addition of styling and data tables using sweet alert, toasters, and data tables. it also explains the addition of api calls for retrieving and deleting data.', 'duration': 457.314, 'highlights': ['The chapter demonstrates the implementation of a pop-up alert for confirmation when deleting an item, enhancing user experience and ensuring intentional deletions.', 'The addition of styling and data tables using sweet alert, toasters, and data tables is discussed to improve the visual presentation of the web application and enhance user interaction.', 'The process of adding API calls for retrieving and deleting data is explained, enabling efficient data management and interaction with the web application.']}], 'duration': 1384.379, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I5990195.jpg', 'highlights': ['Client and server-side validation are essential for creating, editing, and updating a book.', 'Property binding simplifies the retrieval of the book object in ASP.NET Core.', 'Redirecting to the index page after successfully creating a book is crucial.', 'Implementing a pop-up alert for confirmation when deleting an item enhances user experience.', 'Adding API calls for retrieving and deleting data enables efficient data management.']}, {'end': 7867.558, 'segs': [{'end': 7404.834, 'src': 'embed', 'start': 7375.195, 'weight': 0, 'content': [{'end': 7379.401, 'text': 'And right here, we need to define the route that should be used to call this.', 'start': 7375.195, 'duration': 4.206}, {'end': 7384.387, 'text': "So the route we'll just call is API forward slash book.", 'start': 7380.462, 'duration': 3.925}, {'end': 7387.451, 'text': 'And this will be an API controller.', 'start': 7385.128, 'duration': 2.323}, {'end': 7392.709, 'text': "So that way, we'll make sure that the book controller is an API controller.", 'start': 7388.587, 'duration': 4.122}, {'end': 7396.53, 'text': 'And this is the route that will be used in search startup.', 'start': 7393.129, 'duration': 3.401}, {'end': 7404.834, 'text': 'Since we have added map controller, you can navigate to this URL and get request will return you data from here.', 'start': 7396.871, 'duration': 7.963}], 'summary': "Define api route 'api/book' for book controller.", 'duration': 29.639, 'max_score': 7375.195, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7375195.jpg'}, {'end': 7488.445, 'src': 'embed', 'start': 7455.017, 'weight': 1, 'content': [{'end': 7465.607, 'text': 'We will have the script tag here will give SRC inside j s, I will create a new JavaScript called booklist dot j s.', 'start': 7455.017, 'duration': 10.59}, {'end': 7476.517, 'text': "Let's add that script file inside the WW route j s, we'll add a new item, we can search for Java here.", 'start': 7467.21, 'duration': 9.307}, {'end': 7480.159, 'text': "And let's call this book list.", 'start': 7476.537, 'duration': 3.622}, {'end': 7484.542, 'text': "And then let's start working on the JavaScript here.", 'start': 7481.52, 'duration': 3.022}, {'end': 7488.445, 'text': "So we'll have the variable data table here.", 'start': 7485.223, 'duration': 3.222}], 'summary': 'Creating a new javascript file called booklist.js and adding a script file inside the js route to work on the variable data table.', 'duration': 33.428, 'max_score': 7455.017, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7455017.jpg'}, {'end': 7563.292, 'src': 'embed', 'start': 7531.449, 'weight': 3, 'content': [{'end': 7533.13, 'text': 'we will call data table.', 'start': 7531.449, 'duration': 1.681}, {'end': 7539.994, 'text': 'This data table has been included with the JavaScript reference that you added with data tables.', 'start': 7534.071, 'duration': 5.923}, {'end': 7545.257, 'text': 'So dot data table will populate a data table on DT load.', 'start': 7541.074, 'duration': 4.183}, {'end': 7548.464, 'text': 'here we have few things.', 'start': 7546.463, 'duration': 2.001}, {'end': 7553.267, 'text': 'we need to make an Ajax call to our API.', 'start': 7548.464, 'duration': 4.803}, {'end': 7563.292, 'text': 'so for that right here we need to define the URL, and URL is forward slash API, forward slash book.', 'start': 7553.267, 'duration': 10.025}], 'summary': "Javascript reference added to populate a data table on dt load and make an ajax call to the api with the url '/api/book'.", 'duration': 31.843, 'max_score': 7531.449, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7531449.jpg'}, {'end': 7781.794, 'src': 'embed', 'start': 7748.999, 'weight': 4, 'content': [{'end': 7753, 'text': 'And then in the next line, we will add the Edit button.', 'start': 7748.999, 'duration': 4.001}, {'end': 7755.881, 'text': 'We will close the anchor tag here.', 'start': 7753.68, 'duration': 2.201}, {'end': 7761.643, 'text': 'And we can copy this anchor tag because we want another one for delete.', 'start': 7756.941, 'duration': 4.702}, {'end': 7766.906, 'text': "So right here, I'll add some space ampersand and BSP.", 'start': 7762.344, 'duration': 4.562}, {'end': 7769.768, 'text': "And we'll paste it one more time.", 'start': 7767.987, 'duration': 1.781}, {'end': 7775.49, 'text': 'On delete, we do not want to go to any of the URL.', 'start': 7771.649, 'duration': 3.841}, {'end': 7778.592, 'text': "So we'll leave the extra out right now.", 'start': 7776.031, 'duration': 2.561}, {'end': 7781.794, 'text': "We'll have the classes of PTN danger.", 'start': 7779.212, 'duration': 2.582}], 'summary': 'Adding an edit button and a delete anchor tag with classes ptn danger.', 'duration': 32.795, 'max_score': 7748.999, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7748999.jpg'}, {'end': 7847.583, 'src': 'embed', 'start': 7814.6, 'weight': 2, 'content': [{'end': 7824.467, 'text': "if there is no data, I want to display no data found, we'll do a comma here, and we'll give it a width of 100%.", 'start': 7814.6, 'duration': 9.867}, {'end': 7829.47, 'text': 'Everything should be in double quotes like this.', 'start': 7824.467, 'duration': 5.003}, {'end': 7834.573, 'text': 'So with this, we have our data table in place, let me save this.', 'start': 7830.35, 'duration': 4.223}, {'end': 7839.176, 'text': 'And we need to run our application to see this in action.', 'start': 7835.314, 'duration': 3.862}, {'end': 7843.239, 'text': 'We already added the code inside the index page.', 'start': 7840.017, 'duration': 3.222}, {'end': 7847.583, 'text': 'So if we go on book, we will see two tables.', 'start': 7844.921, 'duration': 2.662}], 'summary': 'Configured data table with 100% width, displaying two tables in the application.', 'duration': 32.983, 'max_score': 7814.6, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7814600.jpg'}], 'start': 7375.195, 'title': 'Developing and creating data table in javascript', 'summary': 'Covers the process of defining an api route for a book controller, adding a new javascript file for a data table, and making an ajax call, along with creating a data table in javascript, specifying column names, widths, and data fields, and rendering edit and delete buttons with styles and behaviors.', 'chapters': [{'end': 7590.457, 'start': 7375.195, 'title': 'Developing api controller and javascript for data table', 'summary': 'Covers the process of defining an api route for a book controller, adding a new javascript file for a data table, and making an ajax call to retrieve data from the api, with emphasis on the url, type, and data type parameters.', 'duration': 215.262, 'highlights': ['The chapter covers the process of defining an API route for a book controller, adding a new JavaScript file for a data table, and making an Ajax call to retrieve data from the API, with emphasis on the URL, type, and data type parameters.', "The route 'API forward slash book' is defined as the API controller for accessing data.", "A new JavaScript file 'booklist.js' is created to handle the functionality of loading a data table.", "An Ajax call is made to the URL 'forward slash API, forward slash book' using a get request to retrieve data in JSON format."]}, {'end': 7867.558, 'start': 7591.117, 'title': 'Creating data table in javascript', 'summary': 'Explains the process of creating a data table in javascript, specifying the column names, widths, and specific data fields, while also detailing the rendering of edit and delete buttons with associated styles and behaviors.', 'duration': 276.441, 'highlights': ['The process of creating a data table in JavaScript is detailed, including specifying the column names and their widths, such as 30% for each column.', 'The rendering of edit and delete buttons is described, with specific attention to the use of anchor tags, classes, and styles, such as cursor pointer and width of 100 pixels.', 'The need to pass the ID of the book for edit or delete actions is emphasized, ensuring the functionality of the buttons is explained.']}], 'duration': 492.363, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7375195.jpg', 'highlights': ["The route 'API forward slash book' is defined as the API controller for accessing data.", "A new JavaScript file 'booklist.js' is created to handle the functionality of loading a data table.", 'The process of creating a data table in JavaScript is detailed, including specifying the column names and their widths, such as 30% for each column.', "An Ajax call is made to the URL 'forward slash API, forward slash book' using a get request to retrieve data in JSON format.", 'The rendering of edit and delete buttons is described, with specific attention to the use of anchor tags, classes, and styles, such as cursor pointer and width of 100 pixels.']}, {'end': 8845.697, 'segs': [{'end': 7904.134, 'src': 'embed', 'start': 7869.699, 'weight': 0, 'content': [{'end': 7880.372, 'text': 'We go on book And great, we see our data table in place with the number of entries we have pagination, sorting and search by default.', 'start': 7869.699, 'duration': 10.673}, {'end': 7883.454, 'text': 'Here, the stylings has not been applied.', 'start': 7881.273, 'duration': 2.181}, {'end': 7885.595, 'text': 'Let me go back and take a look.', 'start': 7883.894, 'duration': 1.701}, {'end': 7888.177, 'text': 'We forgot an equal to here.', 'start': 7886.256, 'duration': 1.921}, {'end': 7891.418, 'text': "Let's save this, go back and refresh.", 'start': 7889.157, 'duration': 2.261}, {'end': 7893.239, 'text': 'And perfect.', 'start': 7892.519, 'duration': 0.72}, {'end': 7895.741, 'text': 'We see everything is coming along.', 'start': 7893.82, 'duration': 1.921}, {'end': 7898.342, 'text': 'Let me just reduce the size here.', 'start': 7896.341, 'duration': 2.001}, {'end': 7904.134, 'text': "I'll make it 20.", 'start': 7898.762, 'duration': 5.372}], 'summary': 'Data table with pagination, sorting, and search by default. styling needs to be applied. the size is reduced to 20.', 'duration': 34.435, 'max_score': 7869.699, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7869699.jpg'}, {'end': 7958.572, 'src': 'embed', 'start': 7932.534, 'weight': 3, 'content': [{'end': 7937.538, 'text': 'And on okay, we want to delete it directly, but using an API call.', 'start': 7932.534, 'duration': 5.004}, {'end': 7945.104, 'text': "So for that, we'll have to go back and we'll have to add an API call inside our book controller.", 'start': 7938.498, 'duration': 6.606}, {'end': 7948.246, 'text': 'So we will add an HTTP delete here.', 'start': 7945.484, 'duration': 2.762}, {'end': 7953.511, 'text': 'And this will be public I action result, delete.', 'start': 7949.447, 'duration': 4.064}, {'end': 7958.572, 'text': "Here we'll be getting an id that we have to delete.", 'start': 7955.27, 'duration': 3.302}], 'summary': 'Adding an api call in the book controller to perform http delete with id', 'duration': 26.038, 'max_score': 7932.534, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7932534.jpg'}, {'end': 8181.424, 'src': 'embed', 'start': 8141.747, 'weight': 1, 'content': [{'end': 8144.849, 'text': 'And then at the end, we will be adding the delete function.', 'start': 8141.747, 'duration': 3.102}, {'end': 8150.394, 'text': "So we'll add function delete, we'll receive the URL here.", 'start': 8145.71, 'duration': 4.684}, {'end': 8153.316, 'text': 'And we need to display sweet alert.', 'start': 8151.114, 'duration': 2.202}, {'end': 8155.918, 'text': "So we'll do SWAL.", 'start': 8153.856, 'duration': 2.062}, {'end': 8159.321, 'text': "And we'll add the properties like title.", 'start': 8156.859, 'duration': 2.462}, {'end': 8162.745, 'text': 'are you sure?', 'start': 8161.343, 'duration': 1.402}, {'end': 8167.409, 'text': 'comma, we will have text.', 'start': 8162.745, 'duration': 4.664}, {'end': 8174.216, 'text': 'once deleted, you will not be able to recover.', 'start': 8167.409, 'duration': 6.807}, {'end': 8181.424, 'text': 'we can have an icon here of warning and we can have a danger mode here.', 'start': 8174.216, 'duration': 7.208}], 'summary': 'Adding delete function with sweet alert for confirmation', 'duration': 39.677, 'max_score': 8141.747, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I8141747.jpg'}, {'end': 8405.048, 'src': 'embed', 'start': 8351.519, 'weight': 4, 'content': [{'end': 8359.201, 'text': 'And then if we just scroll back, inside the sweet alert, I will add another property here buttons is equal to true.', 'start': 8351.519, 'duration': 7.682}, {'end': 8371.946, 'text': "And after that, if we go back, and we go to book, create new, let's add one, create, and then if we click Delete, we see OK and cancel.", 'start': 8359.861, 'duration': 12.085}, {'end': 8375.227, 'text': 'So that way, we have everything working.', 'start': 8372.946, 'duration': 2.281}, {'end': 8385.352, 'text': 'Now here I have had request from student many times that the create view will look similar to what we have for our edit.', 'start': 8377.168, 'duration': 8.184}, {'end': 8390.334, 'text': 'So why not combine both of them in one view or one razor page.', 'start': 8385.972, 'duration': 4.362}, {'end': 8393.475, 'text': 'So that can be done absolutely.', 'start': 8391.574, 'duration': 1.901}, {'end': 8397.677, 'text': "Let me stop the application and I'll show you how that is possible.", 'start': 8393.735, 'duration': 3.942}, {'end': 8405.048, 'text': 'Usually the name for such page is absurd, because it is a combination of update and insert.', 'start': 8398.786, 'duration': 6.262}], 'summary': 'Combining create and edit views into one page requested by students, with sweet alert buttons added.', 'duration': 53.529, 'max_score': 8351.519, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I8351519.jpg'}, {'end': 8706.257, 'src': 'embed', 'start': 8676.723, 'weight': 2, 'content': [{'end': 8687.683, 'text': "In the next video, let's fix the update view or the razor page and we should be good In the last video, we fixed the handlers for absurd.", 'start': 8676.723, 'duration': 10.96}, {'end': 8691.185, 'text': "In this video, let's work on the razor page.", 'start': 8688.303, 'duration': 2.882}, {'end': 8696.469, 'text': 'The things that we have to do differently in create and edit is the title here.', 'start': 8691.966, 'duration': 4.503}, {'end': 8706.257, 'text': 'So in here, we can use the razor syntax and we can check if model dot book dot ID does not equal to zero.', 'start': 8697.71, 'duration': 8.547}], 'summary': 'Fixing update view and working on razor page in the video.', 'duration': 29.534, 'max_score': 8676.723, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I8676723.jpg'}], 'start': 7869.699, 'title': 'Enhancing data table and api functionality', 'summary': 'Covers styling a data table with pagination, sorting, and search functionality, adding a delete feature with a nice alert, implementing delete functionality with an api call in a book controller, resolving issues with toaster notifications and sweet alert buttons, and handling create and update operations in a razor page with nullable integers and model state validation.', 'chapters': [{'end': 7931.973, 'start': 7869.699, 'title': 'Styling data table and adding delete functionality', 'summary': 'Covers styling a data table with pagination, sorting, and search functionality, and adding a delete feature to display a nice alert upon clicking the delete button.', 'duration': 62.274, 'highlights': ['Styling the data table with pagination, sorting, and search functionality', 'Adding a delete feature to display a nice alert upon clicking the delete button', 'Adjusting the size of elements to 40 and width to 70 pixels for better alignment']}, {'end': 8495.104, 'start': 7932.534, 'title': 'Adding delete functionality with api call', 'summary': 'Discusses adding a delete function with an api call in a book controller, including the method to delete, implementing the delete function in javascript, and resolving issues with toaster notifications and sweet alert buttons.', 'duration': 562.57, 'highlights': ['The chapter discusses adding a delete function with an API call in a book controller, including the method to delete, implementing the delete function in JavaScript, and resolving issues with toaster notifications and sweet alert buttons.', "The chapter also covers combining the create and edit views into one 'absurd' page, detailing the process of copying and modifying the edit page to create a single view for both creation and updating."]}, {'end': 8845.697, 'start': 8495.924, 'title': 'Handling create and update operations in razor page', 'summary': 'Discusses handling create and update operations in a razor page, including using nullable integers, retrieving books from the database, validating model state, and differentiating between create and edit scenarios while updating properties.', 'duration': 349.773, 'highlights': ['We handle create and update operations using a Razor page, including using nullable integers and differentiating between create and edit scenarios.', 'Retrieving books from the database using methods like first or default async or find async.', 'Validation of model state is performed before processing the create or update operation.', 'Differentiating between create and edit scenarios while updating properties, and when to use the add method versus the update method.', 'Testing the create and update operations in the application by navigating through the Razor page and verifying the functionality.']}], 'duration': 975.998, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I7869699.jpg', 'highlights': ['Styling the data table with pagination, sorting, and search functionality', 'Adding a delete feature to display a nice alert upon clicking the delete button', 'Handling create and update operations using a Razor page with nullable integers and model state validation', 'Implementing delete functionality with an API call in a book controller', 'Resolving issues with toaster notifications and sweet alert buttons', "Combining the create and edit views into one 'absurd' page"]}, {'end': 9502.284, 'segs': [{'end': 9024.274, 'src': 'embed', 'start': 8967.151, 'weight': 0, 'content': [{'end': 8971.833, 'text': 'So I do not want to start with that route will go with no authentication.', 'start': 8967.151, 'duration': 4.682}, {'end': 8974.934, 'text': "And we'll add database objects manually.", 'start': 8972.353, 'duration': 2.581}, {'end': 8977.755, 'text': 'That way we will learn those concepts.', 'start': 8975.654, 'duration': 2.101}, {'end': 8983.397, 'text': "That being said, once everything is aligned here, let's hit the Create button.", 'start': 8978.715, 'duration': 4.682}, {'end': 8989.982, 'text': 'Perfect So with this, the project has been created with model views and controller.', 'start': 8984.957, 'duration': 5.025}, {'end': 8994.287, 'text': 'And this is slightly different to what we have seen with razor pages.', 'start': 8990.403, 'duration': 3.884}, {'end': 9004.657, 'text': 'As we saw from the architecture, we will have controllers which will have the logic models will have the data and view will be the UI component.', 'start': 8995.268, 'duration': 9.389}, {'end': 9008.745, 'text': 'So we have all of those three folders right here.', 'start': 9005.723, 'duration': 3.022}, {'end': 9019.611, 'text': 'And the other things are common like www root dependencies, properties, app settings, program.cs and startup.cs.', 'start': 9009.325, 'duration': 10.286}, {'end': 9024.274, 'text': 'The only difference is inside startup.cs class file.', 'start': 9020.592, 'duration': 3.682}], 'summary': 'Learning manual database object creation and project architecture including model-view-controller and folder structure.', 'duration': 57.123, 'max_score': 8967.151, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I8967151.jpg'}, {'end': 9147.912, 'src': 'embed', 'start': 9113.838, 'weight': 4, 'content': [{'end': 9118.779, 'text': 'So the terminology to remember is within controller, we will have actions.', 'start': 9113.838, 'duration': 4.941}, {'end': 9122.459, 'text': 'The next folder that we have is the models folder.', 'start': 9119.639, 'duration': 2.82}, {'end': 9126.18, 'text': 'Here as of now, we only have added view model.', 'start': 9123.079, 'duration': 3.101}, {'end': 9130.281, 'text': 'But as we proceed, we will be adding new models here.', 'start': 9126.92, 'duration': 3.361}, {'end': 9138.226, 'text': 'Any table that we have in a database, we will have a corresponding class as a model in this folder.', 'start': 9131.321, 'duration': 6.905}, {'end': 9147.912, 'text': 'We will also have view models which are the combination of multiple models, and we will discuss them in detail when we need them.', 'start': 9139.306, 'duration': 8.606}], 'summary': 'In the controller, actions are important. models folder contains view models, and will include new models for each database table.', 'duration': 34.074, 'max_score': 9113.838, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I9113838.jpg'}, {'end': 9283.045, 'src': 'embed', 'start': 9222.158, 'weight': 1, 'content': [{'end': 9232.185, 'text': 'When ASP.NET routing engine receives a request at runtime, it finds the match against the URL pattern defined in the route table.', 'start': 9222.158, 'duration': 10.027}, {'end': 9238.021, 'text': 'If any match is found, then it forwards that request to the controller.', 'start': 9233.456, 'duration': 4.565}, {'end': 9242.685, 'text': 'Otherwise, it will return a 404 not found message.', 'start': 9238.961, 'duration': 3.724}, {'end': 9250.873, 'text': 'When we will create a new ASP dotnet core MVC application routes are already added to the project.', 'start': 9243.446, 'duration': 7.427}, {'end': 9262.365, 'text': "If we switch back to our application, And if we go on startup.cs, right here, where it's adding controllers with view to our pipeline.", 'start': 9251.734, 'duration': 10.631}, {'end': 9270.609, 'text': 'And when we see the middlewares, we have first the app dot use routing, and we have the app dot use endpoints.', 'start': 9262.965, 'duration': 7.644}, {'end': 9276.613, 'text': 'Now you can keep endpoints or you can also use the routing without the endpoints.', 'start': 9271.47, 'duration': 5.143}, {'end': 9283.045, 'text': 'In versions one and two of ASP.NET Core, this was a part of MVC.', 'start': 9277.583, 'duration': 5.462}], 'summary': 'Asp.net routing forwards requests based on url pattern defined in route table.', 'duration': 60.887, 'max_score': 9222.158, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I9222158.jpg'}], 'start': 8846.457, 'title': 'Mvc project setup and asp.net mvc routing', 'summary': 'Covers the setup and folder structure of an mvc project using asp.net core 3.1 and explains the pattern matching system of asp.net routing, including the middleware setup and default routing behavior in mvc.', 'chapters': [{'end': 9193.43, 'start': 8846.457, 'title': 'Mvc project structure and setup', 'summary': 'Covers the setup and folder structure of an mvc project, including creating a new project with asp.net core 3.1 and learning about the differences in architecture and routing between mvc and razor pages.', 'duration': 346.973, 'highlights': ['The project has been created with model views and controller.', 'The main logic of the web application is stored in the controllers folder.', 'The models folder contains classes representing tables in the database, and view models.', 'The views folder contains subfolders for different controllers, with each folder housing the corresponding views for the actions.', 'Differences between MVC and Razor Pages are evident in the setup files, such as the absence of add razor pages in the startup.cs class file and the use of map controller route in the routing and endpoints.']}, {'end': 9502.284, 'start': 9194.55, 'title': 'Overview of asp.net mvc routing', 'summary': 'Explains the pattern matching system of asp.net routing, including how it forwards requests to controllers, the middleware setup in startup.cs, and the default routing behavior in mvc.', 'duration': 307.734, 'highlights': ['ASP.NET routing engine matches incoming requests to URL patterns and forwards them to controllers, returning a 404 not found if no match is found.', 'Middleware setup in startup.cs includes app.useRouting and app.useEndpoints to make routing available to all middlewares and not just MVC.', 'Default routing behavior in MVC specifies a default route that looks for the home controller and calls the index action if nothing is defined.']}], 'duration': 655.827, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I8846457.jpg', 'highlights': ['The project has been created with model views and controller.', 'Middleware setup in startup.cs includes app.useRouting and app.useEndpoints.', 'The main logic of the web application is stored in the controllers folder.', 'ASP.NET routing engine matches incoming requests to URL patterns.', 'The models folder contains classes representing tables in the database, and view models.']}, {'end': 11596.945, 'segs': [{'end': 9560.974, 'src': 'embed', 'start': 9533.843, 'weight': 0, 'content': [{'end': 9541.366, 'text': "Now that we have a brief overview of our MVC project, it's time to perform CRUD operations on the book list again.", 'start': 9533.843, 'duration': 7.523}, {'end': 9545.908, 'text': 'So the first thing we will do is we will add model for our book.', 'start': 9542.306, 'duration': 3.602}, {'end': 9549.809, 'text': "So we'll add a new class, we'll call it book.", 'start': 9546.808, 'duration': 3.001}, {'end': 9553.291, 'text': 'And in here, we will add all the properties.', 'start': 9550.79, 'duration': 2.501}, {'end': 9555.411, 'text': 'First will be the ID.', 'start': 9554.131, 'duration': 1.28}, {'end': 9557.972, 'text': 'So we can use key data annotation.', 'start': 9555.732, 'duration': 2.24}, {'end': 9560.974, 'text': "And we'll call it prop integer ID.", 'start': 9558.673, 'duration': 2.301}], 'summary': 'Adding model for book with id property using key data annotation', 'duration': 27.131, 'max_score': 9533.843, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I9533843.jpg'}, {'end': 9757.444, 'src': 'embed', 'start': 9728.753, 'weight': 1, 'content': [{'end': 9730.094, 'text': 'Great So this looks good.', 'start': 9728.753, 'duration': 1.341}, {'end': 9737.717, 'text': 'And the connection string have been added in app settings dot JSON, exactly like we did in razor pages.', 'start': 9730.794, 'duration': 6.923}, {'end': 9745.121, 'text': 'The last thing that we have to do is we need to configure startup.cs to use that connection string.', 'start': 9738.918, 'duration': 6.203}, {'end': 9752.381, 'text': 'So within the configure services, we will add services dot add DB context.', 'start': 9746.397, 'duration': 5.984}, {'end': 9757.444, 'text': 'In here, it will be on application DB context.', 'start': 9753.942, 'duration': 3.502}], 'summary': 'Added connection string in app settings json and configured startup.cs.', 'duration': 28.691, 'max_score': 9728.753, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I9728753.jpg'}, {'end': 9982.707, 'src': 'heatmap', 'start': 9857.557, 'weight': 1, 'content': [{'end': 9858.578, 'text': 'There we go.', 'start': 9857.557, 'duration': 1.021}, {'end': 9860.459, 'text': 'And install the package.', 'start': 9858.598, 'duration': 1.861}, {'end': 9868.785, 'text': 'This package we are installing so that if the application is running and we change anything in the view and we refresh,', 'start': 9861.159, 'duration': 7.626}, {'end': 9870.786, 'text': "we don't have to restart the application.", 'start': 9868.785, 'duration': 2.001}, {'end': 9872.687, 'text': 'Whoops, there we go.', 'start': 9870.806, 'duration': 1.881}, {'end': 9877.951, 'text': "And right here, we'll do add razor runtime compilation.", 'start': 9873.588, 'duration': 4.363}, {'end': 9879.347, 'text': 'And Great.', 'start': 9877.971, 'duration': 1.376}, {'end': 9882.951, 'text': 'This is exactly what we did with razor pages as well.', 'start': 9879.988, 'duration': 2.963}, {'end': 9885.635, 'text': "That's why I'm not spending much time here.", 'start': 9883.412, 'duration': 2.223}, {'end': 9888.898, 'text': "Once you do this, let's add a migration.", 'start': 9886.616, 'duration': 2.282}, {'end': 9896.187, 'text': "So we'll go to tools, Nuget package manager console, we'll add migration.", 'start': 9889.539, 'duration': 6.648}, {'end': 9900.13, 'text': 'add book to DB.', 'start': 9898.388, 'duration': 1.742}, {'end': 9903.412, 'text': 'And here we see an error with the migration.', 'start': 9900.93, 'duration': 2.482}, {'end': 9911.819, 'text': "That's because if we go to tools, you'll get package manager, we have to install package for entity framework tools.", 'start': 9904.113, 'duration': 7.706}, {'end': 9924.55, 'text': "So if you search for entity framework tools, we'll install the Microsoft dot entity framework core dot tools to our project.", 'start': 9915.723, 'duration': 8.827}, {'end': 9929.063, 'text': 'Once that is installed, then add migration should work.', 'start': 9925.691, 'duration': 3.372}, {'end': 9936.227, 'text': "Awesome Let's go back to package manager and hit the command one more time.", 'start': 9931.264, 'duration': 4.963}, {'end': 9940.689, 'text': 'This time it is already building the project it was successful.', 'start': 9937.427, 'duration': 3.262}, {'end': 9943.611, 'text': 'And it adds a migration right here.', 'start': 9941.29, 'duration': 2.321}, {'end': 9946.572, 'text': 'Great migration looks good.', 'start': 9944.831, 'duration': 1.741}, {'end': 9951.455, 'text': "Let's update the database to push our model to database.", 'start': 9947.173, 'duration': 4.282}, {'end': 9954.631, 'text': 'will first create that database.', 'start': 9952.669, 'duration': 1.962}, {'end': 9956.712, 'text': 'And then it will add the tables.', 'start': 9955.031, 'duration': 1.681}, {'end': 9960.475, 'text': "Great, let's go back to make sure it's working.", 'start': 9957.533, 'duration': 2.942}, {'end': 9965.598, 'text': "We'll go to database in SQL Server, we have the new database.", 'start': 9961.335, 'duration': 4.263}, {'end': 9968.74, 'text': 'In there, we have our table called books.', 'start': 9966.238, 'duration': 2.502}, {'end': 9974.044, 'text': 'And great, we have all the columns as we wanted.', 'start': 9971.062, 'duration': 2.982}, {'end': 9982.707, 'text': "And Once we add the model to our database, next thing, let's go to our master page, which is underscored layout.", 'start': 9974.064, 'duration': 8.643}], 'summary': 'Installing package for automatic application refresh, adding migration, and updating database successfully.', 'duration': 125.15, 'max_score': 9857.557, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I9857557.jpg'}, {'end': 10434.726, 'src': 'embed', 'start': 10405.332, 'weight': 2, 'content': [{'end': 10412.054, 'text': 'Because we will be loading this view using the API call right here with the help of data table.', 'start': 10405.332, 'duration': 6.722}, {'end': 10414.756, 'text': 'So let me go to the view.', 'start': 10413.095, 'duration': 1.661}, {'end': 10418.738, 'text': 'And in here, we need to add calls for our JavaScript.', 'start': 10415.396, 'duration': 3.342}, {'end': 10427.102, 'text': 'That being said, the JavaScript will be exactly same with one or two modifications as compared to our razor code.', 'start': 10419.338, 'duration': 7.764}, {'end': 10434.726, 'text': 'So I have that in the attachments as well, which is exactly same as what we have in the razor project.', 'start': 10428.023, 'duration': 6.703}], 'summary': 'The view will be loaded using an api call with similar javascript as the razor code.', 'duration': 29.394, 'max_score': 10405.332, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I10405332.jpg'}, {'end': 10816.023, 'src': 'embed', 'start': 10787.635, 'weight': 4, 'content': [{'end': 10795.199, 'text': 'If you click on Add new book, it will give an error because we have not added that action method or that view.', 'start': 10787.635, 'duration': 7.564}, {'end': 10802.017, 'text': "In the next video, let's work on the absurd get action method the view.", 'start': 10796.299, 'duration': 5.718}, {'end': 10808.56, 'text': "In this video, let's work and create an absurd get action method.", 'start': 10803.778, 'duration': 4.782}, {'end': 10816.023, 'text': 'absurd view will be used for two places, one to edit a book and one to create a book.', 'start': 10809.48, 'duration': 6.543}], 'summary': 'Fix add new book error, create absurd get action method for editing and creating books.', 'duration': 28.388, 'max_score': 10787.635, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I10787635.jpg'}, {'end': 11556.431, 'src': 'embed', 'start': 11525.393, 'weight': 3, 'content': [{'end': 11526.834, 'text': "Let's try to update this.", 'start': 11525.393, 'duration': 1.441}, {'end': 11534.199, 'text': 'You can see create and edit both the functionalities are working as expected.', 'start': 11529.176, 'duration': 5.023}, {'end': 11537.782, 'text': 'The only thing that is remaining is delete here.', 'start': 11535.3, 'duration': 2.482}, {'end': 11542.625, 'text': 'Now when you click on Delete, you see a nice sweet alert.', 'start': 11539.142, 'duration': 3.483}, {'end': 11549.95, 'text': 'And if you click OK here, it should delete the book and it displays nice toaster notification.', 'start': 11543.245, 'duration': 6.705}, {'end': 11556.431, 'text': 'You can see our create, edit as well as delete are working as expected.', 'start': 11551.209, 'duration': 5.222}], 'summary': 'Create, edit, and delete functionalities are all working as expected with nice user notifications.', 'duration': 31.038, 'max_score': 11525.393, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I11525393.jpg'}], 'start': 9502.745, 'title': 'Asp.net core mvc operations', 'summary': 'Covers creating and updating a book in an asp.net core mvc project, adding form validation, implementing crud operations, handling post actions, and performing create, update, and delete functionalities while displaying toasts and sweet alerts.', 'chapters': [{'end': 9593.368, 'start': 9502.745, 'title': 'Mvc project and crud operations', 'summary': 'Covers the creation of an mvc application, including the addition of a book model with properties for id, name, author, and isbn, and the process of adding the model to the database for performing crud operations.', 'duration': 90.623, 'highlights': ['The chapter covers the creation of an MVC application and the addition of a book model with properties for ID, name, author, and ISBN.', 'The process of adding the model to the database for performing CRUD operations is explained.']}, {'end': 10379.016, 'start': 9594.169, 'title': 'Adding book to database in mvc', 'summary': 'Covers adding the application db context, configuring the connection string, adding a migration, updating the database, adding a new controller for books, and implementing third-party tools like sweet alert, toaster notification, and data tables for the mvc project.', 'duration': 784.847, 'highlights': ['Adding application DB context and configuring connection string', 'Adding migration and updating the database', 'Adding a new controller for books and creating action methods', 'Implementing third-party tools for MVC project']}, {'end': 10786.814, 'start': 10379.896, 'title': 'Mvc javascript integration', 'summary': 'Discusses integrating javascript with mvc, including modifying the index view, calling controller api, and adding a main table with data loaded using data tables.', 'duration': 406.918, 'highlights': ['Integrating JavaScript with MVC', 'Calling Controller API', 'Adding Main Table with Data Loaded Using Data Tables']}, {'end': 11107.762, 'start': 10787.635, 'title': 'Adding absurd view and action method', 'summary': 'Demonstrates the creation of an absurd get action method and view in the books controller, which allows for editing and creating a book, using a nullable parameter to handle the id and populating the view with book data from the database, with a focus on displaying the appropriate action (create or edit) and the book title.', 'duration': 320.127, 'highlights': ['The chapter demonstrates how to create an absurd get action method and view in the books controller, allowing for both editing and creating a book, emphasizing the use of a nullable parameter to handle the ID and populating the view with book data from the database, with a focus on displaying the appropriate action (create or edit) and the book title.', 'The view is designed to display the edit or create book based on the request, utilizing the passed book object and checking for a null ID to determine the type of request, ensuring that the single line serves both create and edit book to display the title.', 'The video also covers the process of adding the absurd view, including defining the model as the book object, displaying the appropriate action (create or edit) based on the request, and setting up the form tag with the method of post to submit the button to the post action method for absurd inside the books controller.']}, {'end': 11596.945, 'start': 11108.603, 'title': 'Asp.net core mvc operations', 'summary': 'Demonstrates the process of creating and updating a book in an asp.net core mvc project, including adding form validation and implementing crud operations, with a focus on submitting the form, handling post actions, and performing create, update, and delete functionalities while displaying toasts and sweet alerts.', 'duration': 488.342, 'highlights': ['The chapter demonstrates the process of creating and updating a book', 'Implementing CRUD operations, with a focus on submitting the form, handling post actions, and performing create, update, and delete functionalities', 'Displaying toasts and sweet alerts for successful and failed operations']}], 'duration': 2094.2, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/C5cnZ-gZy2I/pics/C5cnZ-gZy2I9502745.jpg', 'highlights': ['The chapter covers the creation of an MVC application and the addition of a book model with properties for ID, name, author, and ISBN.', 'Adding application DB context, configuring connection string, and implementing third-party tools for MVC project', 'Integrating JavaScript with MVC, calling Controller API, and adding Main Table with Data Loaded Using Data Tables', 'Demonstrates creating and updating a book, implementing CRUD operations, and displaying toasts and sweet alerts', 'Explains the process of adding the absurd get action method and view in the books controller, emphasizing the use of a nullable parameter to handle the ID and populating the view with book data from the database']}], 'highlights': ['The course covers the basics of ASP.NET Core 3.1, including file and folder structure, middleware, routing, tag helpers, and razor syntax, requiring 3 months of coding in C sharp and familiarity with basic SQL.', "The projects built in the course focus on a basic GRUD website, demonstrating Create, Read, Update, and Delete functionality, with the source code published on GitHub and a recommendation for students to compare their code with the instructor's version to identify differences and learn from errors.", 'The chapter provides a detailed demonstration of building two projects: a simple razor project displaying a book list and a main project using MVC, with a focus on CRUD operations and the use of data tables, validations, editing, and deletion, aiming to provide a great start for learning MVC and ASP.NET Core.', 'The instructor emphasizes the importance of building a solid foundation in ASP.NET Core before diving into deeper and complex courses, and offers more detailed and in-depth courses on both MVC and Razer Pages with ASP.NET Core, along with guidance on enrolling for the lowest price.', 'Dependency injection reduces redundancy and improves reusability', 'The ASP.NET Core pipeline specifies how the application should respond to HTTP requests and is configured using methods like ad razor pages and the configure method, with the latter used to configure the HTTP request pipeline.', "The 'Add migration' command creates the script for the book table and 'Update database' command creates the database and pushes the migrations", 'The process involves using HTML helper to create an index page for book management, making the task efficient and straightforward.', 'Client and server-side validation are essential for creating, editing, and updating a book.', "The route 'API forward slash book' is defined as the API controller for accessing data.", 'Styling the data table with pagination, sorting, and search functionality', 'The project has been created with model views and controller.', 'The chapter covers the creation of an MVC application and the addition of a book model with properties for ID, name, author, and ISBN.']}