Pages

Men

rh

10/22/2014

HandleUnknownAction in MVC

Introduction

MVC stands for Model-View-Controller. This is an architectural design for developing the application where the application is basically divided into 3 layers and each layer has its own relevant functionalities.

View provides the look and feel to the application what exactly the end user sees. These are the template files that your application uses to dynamically generate HTML responses and files may have the extensions html, asp, aspx, cshtml, and vbhtml, depending on the language content.

Models are the classes like customer class, vendor class which contains the business logic, validation logic and data access logic. In MVC models, both hold and manipulate application data.

Controller is the heart of the application which controls the flow of application execution. It handles incoming browser requests, retrieves model data, and then specifies view templates that return a response to the browser.

Background

In MVC, browser request comes in the form of actions which are nothing but the function names in the controller class and the controller class can have many action methods defined within.
So when any browser requests an action along with the controller, the controller looks for an associated action name and returns the response in the form of views or files or might redirect to another controller action. So the question is now what if the controller doesn't find the associated action. And the answer will be it will throw the error.

Here I have added one controller class, i.e., EmpoyeeInfoController.cs. And it has the actions named GetEmployeeInfo, GetCompanyInfo and GetSalaryInfo. And I have defined the GetEmployeeInfo, GetCompanyInfo and not GetSalaryInfo.
public ActionResult GetEmployeeInfo()
{
    return View();
}
public ActionResult GetCompanyInfo()
{
    return View();
}
 
So while calling the GetSalaryInfo. it is giving me the above error.

In order to avoid this, we can use the "Controller.HandleUnknownAction". This method gets called when a controller cannot find an action method that matches a browser request. And in this action, we can customize our code by returning a view which will show the user a default message like "The action is an unknown action" or can log the Exception information or we can redirect to a different controller for further customized action. The defined functionality for this action can be like below:
protected override void HandleUnknownAction(string actionName)
    {
        this.View(errorpage).ExecuteResult(this.ControllerContext);
    }
 
And now, it will give me the below output instead of that error.
This is one way we can use the Controller.HandleUnknownAction. And there are other reasons we can use this function.

1. Method Overriding

Sometimes, we can find that there are so many actions that are not doing something besides calling the view with the same name like below:
public ActionResult GetEmployeeInfo()
{
    return View();
}
public ActionResult GetCompanyInfo()
{
    return View();
}
So by overriding the method HandleUnknownAction() of the Controller class, we are able to merge them all to reduce the unnecessary lines of code and simplify the action calls.
protected override void HandleUnknownAction(string actionName)
{
    this.View(actionName).ExecuteResult(this.ControllerContext);
}

2. Defining the Default Action

There might be a number of actions in the application which give the same result for the requested actions. In those cases, we can define one action with HandleUnknownAction and go ahead to give the output. We can also use switch case within this to define the various actions based on different conditions and a default action.
protected override void HandleUnknownAction(string actionName)
{
    switch (actionName)
    {
        case "GetEmployee":
            this.RedirectToAction("GetEmployeeInfo").ExecuteResult(this.ControllerContext);
            break;
        case "GetCompany":
            this.RedirectToAction("GetCompanyInfo").ExecuteResult(this.ControllerContext);
            break;
        default:
            this.RedirectToAction("HomePage").ExecuteResult(this.ControllerContext);
            break;               
    }
}
 
Source Collected from Codeproject.com
http://www.codeproject.com/Tips/830582/HandleUnknownAction-in-MVC 


No comments :

Post a Comment