Action Result And Return Type In ASP.NET MVC
An ActionResult is return type of method/action defined in a controller. ActionResult is a class defined in namespace System.Web.Mvc. Result returned by action/method is called action result. We can return any type of object such as string,integer or boolean and these are wrapped into
appropriate ActionResult before they are rendered. ActionResult is base class of all action result.
List of ActionResult
1)ViewResult
2)PartialViewResult
3)RedirectToRouteResult
4)JsonResult
5)JavaScriptResult
6)ContentResult
7)HttpStatusCodeResult
8)HttpUnauthorizedResult
9)HttpNotFoundResult
10)FileResult
11)FileContentResult
12)FilePathResult
13)FileStreamResult
14)RedirectResult
15)EmptyResult
When to use ActionResult ?
As ActionResult is base class for all the actions performed so you can use ActionResult as a return type for any type of action result. But when you have have to return different action result based on conditions then
you must use ActionResult as return type.
Example
public ActionResult MultipleActionResult()
{
if(condition)
{
return RedirectToAction("ActionName","ControllerName","Route Values");
}
else
{
return View();
}
}
Here you can't use "RedirectToRouteResult" or "ViewResult" as a return type as in case of ViewResult as return type if condition is true then you have to redirect to another action which can't be handled by ViewResult and in case of RedirectToRouteResult as return type if condition is
false then you have to return view which can't be wrapped into RedirectToRouteResult. So, it is better to use ActionResult as return type as it is base class for all actions and can wrap any type of action.
I am going to explain first six action result for more you may refer to MSDN.
1)ViewResult
Returns a view to render as a web page.
public ViewResult Index()
{
ICollection<Projects> projects = builderProjectControllerApi.GetProjects();
if (projects == null)
{
ModelState.AddModelError("error", "Problem in getting records.");
return View();
}
else
{
return View(projects);
}
}
Here, View is strongly bind to a model "project" and I am returning a collection of project to view. We can use ActionResult as return type instead of ViewResult as ActionResult is base class of all actions.
2)PartialViewResult
Returns a partial view that has to be render within another view.
public PartialViewResult NewSpecificationRow(int id, string contactName, string landlineNumber, string mobileNumber)
{
var info = new ContactDetail { ContactId=id,ContactName=contactName,LandlineNumber=landlineNumber,MobileNumber=mobileNumber};
return PartialView("_NewContactDetails", info);
}
ContactDetail is a class which is model for partial view "_NewContactDetails". Details are wrapped into info and passed to partial view. From main view there is ajax call to this method
to render partial view. We can use ActionResult as return type instead of PartialViewResult as ActionResult is base class of all actions.
3)RedirectToRouteResult
Redirects to another action of same controller or action of some other controller.
[HttpPost]
public RedirectToRouteResult NewSpecificationRow(Student student)
{
string name1 = student.Name;
int id = student.Id;
string address = student.Address;
return RedirectToAction("Save", new { name = name1});
}
public ActionResult Save(string name)
{
ViewBag.Name = name;
return View("Save");
}
Here, we are setting name1 with a value of student's name and redirecting to another action save and passing name1 as a parameter value. We can use ActionResult as return type instead of RedirectToRouteResult as ActionResult is base class of all actions.
Redirecting to action in another controller-:
[HttpPost]
public RedirectToRouteResult NewSpecificationRow(Student student)
{
string name1 = student.Name;
int id = student.Id;
string address = student.Address;
return RedirectToAction("ActionName","ControllerName", new { name = name1});
}
4)JsonResult
Returns object in JSON format.
[HttpPost]
public JsonResult Save(Student student)
{
string name = student.Name;
int id = student.Id;
string address = student.Address;
return Json("object received");
}
Here, I have sent object of student from view through ajax call and sending message "object received" to view on receiving the object. We can use ActionResult as return type instead of JsonResult as ActionResult is base class of all actions.
[HttpGet]
public JsonResult Display()
{
Student s = new Student();
s.Name = "priyank";
s.Id = 3;
s.Address = "Clementown";
return Json(s, JsonRequestBehavior.AllowGet);
}
Here, we are sending object from controller to view in a JSON format. JsonRequestBehavior.AllowGet is used to enable "Get". We can use ActionResult as return type instead of JsonResult as ActionResult is base class of all actions.
5)JavaScriptResult
Returns script that has be executed on client side.
Index.cshtml
<input type="button" id="checkjs" name="submit" value="Javascript" onclick="renderJs()">
<div id="mydiv"></div>
Here, we have button on clicking which we will have an ajax call to function renderJs() defined in JS which in turn calls renderJs() defined in controller which will insert text within div.
script
function somefunction()
{
}
function renderJs()
{
$.ajax({
type: "POST",
url: "Home/renderJs",
contentType: "application/json; charset=utf-8",
dataType: "script",
});
controller
[HttpPost]
public JavaScriptResult renderJs()
{
string js="document.getElementById('mydiv').innerHTML='Example to show JavaScriptResult '";
return JavaScript(js);
}
Output- In controller,we have string to insert text within div.It will show the specifed text on your browser.
If you have to call some other function defined in script say "somefunction()" then you have to do something like this -:
[HttpPost]
public JavaScriptResult renderJs()
{
string js="somefunction();";
return JavaScript(js);
}
6)ContentResult
Use to return user defined content like sending message if ajax call is successful.
On clicking button we have ajax call to method/action of controller which in turn returns the message "Ajax Call is Successful" if ajax call is successful. Parameter response of success function of
ajax call contains the message returned by the user.
<input type="button" id="check1js" name="submit" value="content" onclick="content()">
function content() {
$.ajax({
type: "POST",
url: "Home/content",
contentType: "application/json; charset=utf-8",
dataType: $(this).serialize(),
success: function (response) {
alert(response);
}
});
}
[HttpPost]
public ContentResult content()
{
string response = "Ajax Call is Successful";
return Content(response);
}
7)HttpStatusCodeResult
Returns a specific HTTP response code and description.
8)HttpUnauthorizedResult
Returns the result of an unauthorized HTTP request.
9)HttpNotFound
Indicates the requested resource was not found.
10)FileResult
Returns binary output to write to the response.
11)FileContentResult
Use when you have to write content of binary file to response.
12)FilePathResult
Use when you have to write content of file to response.
13)FileStreamResult
Writes content of file on response through a stream.
14)RedirectResult
Redirects to another action using its URL.
15)EmptyResult
To return nothing or null.
References
http://msdn.microsoft.com/en-us/library/system.web.mvc.actionresult(v=vs.118).aspx
0 Comment(s)