Friday, July 11, 2014

Step by step how to send all ActionResult response types in MVC 4

        By Carmel Schvartzman

In this tutorial we'll learn how to send all Action Result types in MVC 4. We'll create all types of ActionResult types in an application in Asp.Net MVC, with support for JsonResult, FileResult, RedirectResult, redirectToActionResult, EmptyResult, ContentResult, ViewResult and PartialViewResult. All of this classes inherit from the base ActionResult.

The data for this application will be an XML file, which will be displayed in a View as follows :

The documentation for the different types of ActionResult class is exposed at this MSDN web page :

We'll be rendering ALL TYPES OF ActionResult , but first let's create a new Controller, i'll call it "Blog" :

Then add a View for the "Index" Action:

Viewing this way :

Then add a new item to the Menu, for us to browse to our Controller more easily:

The Content ActionResult :

The first ActionResult will practice is the ContentResult :

 Let's render just a string :
The browser shows the rendered string:

Now let's render an entire XML file :

And the browser shows the rendered XML data:

The XML is the following, if you want to copy-paste it :
<?xml version="1.0" encoding="utf-8" ?>
    <body>Don't forget me this weekend!</body>
    <body>Leela, finally you accept to have a date with me!</body>
    <body>In second thoughts, i'll get out with someone else...</body>

The File ActionResult :

Now let's render a file :
 We'll render the same XML file as before:
 The browser shows the rendered XML:

The Redirect ActionResult :

Now let's try to REDIRECT to some web page:

We redirect the browser to my blog:

The Json ActionResult :

Now let's render JSON data:
 The browser shows the rendered JSON object:

The RedirectToAction ActionResult :

In case you need to redirect to ANOTHER ACTION method, use the RedirectToActionResult :

 The second Action method just renders the string it got from the browser.
The browser shows the redirected page, and the Action method gets and renders a "shout" argument::

But, if you wanted to use the MVC mapping for parameters (  /Blog/Echo/YourInput ), it won't work:

 That is because at the routing there is a default for requests, which states that  the parameter is called "type" and not "shout". We have to modify that behavior and set that any request send to /Blog/Echo will get an OPTIONAL "shout" argument, as follows :

Now the argument is correctly mapped:

The PartialView ActionResult :

Now let's render a PartialView, with an XML XDocument as the Model :

Add a new PartialView to the Index Action, in  addition to the View we added before:

Remark the PartialView with an "_" to remind us this is partial.
To loop through all XML nodes, we use the C# properties Descendants( "" ) and to  reach the values we use Descendants( "" ).First().Value :

And the browser displays the PartialView with the data from the XML :

 I added some CSS3 transitions and transformations to make it more responsive (see this post to deep on CSS3 transformations ) :

{  width:20%;  background:#ffd800;  margin:20px auto;  padding:30px;  border:1px solid #eaeaea;  border-radius:10px;  box-shadow:10px 10px 1px #baa21d;  transition:all 3s ease-out 0.5s;  text-align:center; } 
.list:hover {  -webkit-transform:rotate(-1deg) scale(1.1,1.1);

The complete example for ActionResults :

Finally, we gather together all ActionResults and render each one depending on the argument selector. First set the routing to allow the user to enter a type :

Then type all ActionResults types and switch on the actiontype parameter :

Take a look at the JSON part : we cast the XML data inside a generic List<>, to avoid an exception when the JavaScriptSerializer called by the Json object will try to serialize and found a supposed cyclic reference inside the XML :

The browser shows the XML cast as JSON :

That's all!!  In this tutorial we've learned how to send all Action Result types in MVC 4.
Happy programming.....

כתב: כרמל שוורצמן