ActionResult is nothing but a base result class or an abstract parent class. As we know, an MVC architecture follows a request/response process, so the Browser/client will request the Service or the data from the Server and the Server will give a response. Thus, the client can request any type/format of the data like it will request HTML, JSON, JavaScript, binary etc.
Thus, MVC framework provides a valuable Type as ActionResult, which will take care of mostly all types of results.
MVC framework provides some Action Results like:
ActionResult |
Helper Method |
Description |
ViewResult |
View |
ViewResult renders a view as a web page. |
PartialViewResult |
PartialView |
PartialViewResult renders the partial view. |
RedirectResult |
Redirect |
When you want to redirect to another action method, we will use
RedirectResult. |
RedirectToRouteResult |
RedirectToRoute |
Redirect to another action method. |
ContentResult |
Content |
Returns a user-defined content type. |
JsonResult |
Json |
It is used when you want to return a serialized JSON object. |
JavaScriptResult |
JavaScript |
Returns a script that can be executed on the client. |
FileResult |
File |
Returns a binary output to write to the response. |
EmptyResult |
(None) |
Returns a null result. |
If your requirement is not fulfilled by these inbuilt Action Results, you can create your own custom ActionResult, which we will discuss later.
Thus, we have one question. As we can see in our real time project, we are using basically ActionResult as a return type instead mentioning any specific ResultType like JsonResult,ViewResult etc. Why?
ActionResult is a base class of all the inbuilt Result classes. All the mentioned classes are inherited from ActionResult. Thus, we are using the concept of Runtime Polymorphism, where a base class object can point to its child class. Thus, if we are mentioning ActionResult as a return type of any action/function and it returns any child class (viewresult,jsonresult ), it will automatically type cast to the parent class type, i.e., “ActionResult”.
Example 1
- Public ActionResult index() {
- Return view();
- à here we are returning view(viewresult) instead of ActionResult.So with
- the help of polymorphism it will automatically type casted to parent class.
- }
Example 2
You can declare it this way, so you can take advantage of Polymorphism and return different types in the same method.
- public ActionResult MyResult()
- {
- if (someCondition) return View();
- else return Json();
- }