Lesson 4
Lifecycle Events in Razor Pages
Introduction

Welcome to the final lesson of this course on Razor Pages in ASP.NET Core. In this lesson, we will focus on understanding and using lifecycle events in Razor Pages. Knowing these lifecycle events is crucial as they define how our Razor Pages handle different phases of an HTTP request. By the end of this lesson, you will clearly understand how to work with key lifecycle methods such as OnGet, OnPost, OnGetAsync, OnPostAsync, and OnPageHandlerSelected.

Razor Page Lifecycle Overview

In Razor Pages, lifecycle events are specific methods that get triggered at different phases of the HTTP request process. Here are the key lifecycle methods you need to know (you already know OnGet and OnPost, though!):

  • OnGet: Triggered when a GET request is made to the page.
  • OnPost: Triggered when a POST request is made to the page.
  • OnGetAsync: The asynchronous version of OnGet, useful for handling long-running GET requests.
  • OnPostAsync: The asynchronous version of OnPost, useful for handling long-running POST requests.
  • OnPageHandlerSelected: Triggered when a page handler is selected to handle a request.

Understanding how and when these methods are triggered will help you build efficient and responsive web applications.

Example Walkthrough: Handling GET Requests

Let's start with handling GET requests using the OnGet and OnGetAsync methods.

In App/Pages/Lifecycle.cshtml.cs, we have the following OnGet method:

C#
1public void OnGet() 2{ 3 OnGetMessage = "OnGet event triggered"; 4 OnGetAsyncMessage = string.Empty; 5}

This method gets triggered when a GET request is made to the /Lifecycle page. It sets a message indicating that the event was triggered.

Here's the asynchronous version of the GET request handler:

C#
1public async Task<IActionResult> OnGetAsyncCustom() 2{ 3 await Task.Delay(100); // Simulate async work 4 OnGetAsyncMessage = "OnGetAsync event triggered"; 5 OnGetMessage = string.Empty; 6 return Page(); 7}

This method simulates an asynchronous operation and sets a message once it's completed. Notice how it returns a Task<IActionResult>, indicating it's an asynchronous method.

Triggering these methods can be done through the following HTML in App/Pages/Lifecycle.cshtml:

HTML, XML
1<a href="?handler=AsyncCustom">Trigger OnGetAsync</a>

Clicking this link will invoke the OnGetAsyncCustom method, demonstrating the handling of asynchronous GET requests.

Example Walkthrough: Handling POST Requests

Next, let's look at handling POST requests using the OnPost and OnPostAsyncCustom methods.

In App/Pages/Lifecycle.cshtml.cs, we have the following OnPost method:

C#
1public IActionResult OnPost() 2{ 3 OnPostMessage = "OnPost event triggered"; 4 OnPostAsyncMessage = string.Empty; 5 return Page(); 6}

This method gets triggered when a POST request is made to the /Lifecycle page. It sets a message indicating that the event was triggered.

Here's the asynchronous version of the POST request handler:

C#
1public async Task<IActionResult> OnPostAsyncCustom() 2{ 3 await Task.Delay(100); // Simulate async work 4 OnPostAsyncMessage = "OnPostAsync event triggered"; 5 OnPostMessage = string.Empty; 6 return Page(); 7}

This method simulates an asynchronous operation and sets a message once it's completed.

Triggering POST Events

Triggering these POST methods can be done using the following HTML and JavaScript in App/Pages/Lifecycle.cshtml:

HTML, XML
1<a href="#" onclick="triggerPost(''); return false;">Trigger OnPost</a> 2<a href="#" onclick="triggerPost('AsyncCustom'); return false;">Trigger OnPostAsync</a> 3 4<script> 5 function triggerPost(handler) { 6 var form = document.createElement('form'); 7 form.method = 'POST'; 8 if (handler) { 9 form.action = location.pathname + '?handler=' + handler; 10 } 11 document.body.appendChild(form); 12 form.submit(); 13 } 14</script>

Clicking these links will invoke the respective POST methods, demonstrating how to handle synchronous and asynchronous POST requests.

Returning false in the onclick event handler is necessary to prevent the default behavior of the anchor tag (<a>), which is to navigate to the value of the href attribute (#). If we didn't return false, the page could jump to the top after executing the onclick event due to this default behavior. Therefore, return false ensures that only the JavaScript function is executed, effectively preventing any unwanted navigation.

Example Walkthrough: Using OnPageHandlerSelected

The OnPageHandlerSelected method allows you to perform actions when a page handler is selected. Here's how it's implemented in App/Pages/Lifecycle.cshtml.cs:

C#
1public override void OnPageHandlerSelected(PageHandlerSelectedContext context) 2{ 3 OnHandlerSelectedMessage = "OnHandlerSelected event triggered"; 4}

This method is called whenever any handler (e.g., OnGet, OnPost, OnGetAsyncCustom, OnPostAsyncCustom) is selected to process a request. It can be used to set up common logic or logging.

By incorporating this method, you ensure that certain actions are consistently executed regardless of which handler, including custom handlers, is ultimately executed.

Lesson Summary

In this lesson, we explored the lifecycle events in Razor Pages. We covered:

  • The importance of lifecycle events.
  • Key lifecycle methods: OnGet, OnPost, OnGetAsync, OnPostAsync, and OnPageHandlerSelected.
  • Practical examples demonstrating how to handle both synchronous and asynchronous GET and POST requests.
  • How OnPageHandlerSelected integrates with the other methods.

Congratulations on completing the course! You now have a solid understanding of Razor Pages in ASP.NET Core and how to effectively manage page lifecycle events. Make sure to apply these concepts in your real-world projects for efficient and responsive web applications. Keep practicing, and happy coding!

Enjoy this lesson? Now it's time to practice with Cosmo!
Practice is how you turn knowledge into actual skills.