Vici MVC Tip #2 - ActionResult you say?

Vici MVC Tip 2The latest Vici MVC releases from 2080 up contain a new ActionResult object. This allows your controllers to return an action instead of the default void. So what should I use it for? Let's say you would like to stream xml or the contents of a file to the browser. This could be done the old way by using the response object from the WebAppContext or by using the new way using ActionResults.

Also for some ajax requests you expect JSON to be returned by the server in order to make your scripts work. You could do the conversion of your data to JSON by yourself or use anonymous types and the new JSONActionResult to convert your data to JSON automatically.

ActionResults currently available

  • JSONActionResult: Output your data as a JSON formatted string for AJAX or Javascript use.
  • RedirectActionResult: Redirect to another URL.
  • RenderViewActionResult: In fact this is the same as you would use the ChangeLayout method. You define a different view from the default for your controller. As an extra you can provide a complete new ViewData collection to be used by the new view.
  • SendFileActionResult: Send a file through the browser to the user
  • XmlActionResult: Stream an XML string to the browser

In theory this is all very nice, but how do I use this in code? Well here we go.

Stream a file to the browser

  1. using Vici.Mvc;  
  2.  
  3. namespace BVirtual.ViciDemo  
  4. {  
  5.   [Url("/Download/{DownloadUid}")]  
  6.   public class Download : BaseController  
  7.   {  
  8.     /// <summary>  
  9.     /// Default action for the download controller  
  10.     /// </summary>  
  11.     /// <param name="DownloadUid">Paramter passed in by Vici MVC during URL parsing</param>  
  12.     public ActionResult Run(string DownloadUid)  
  13.     {  
  14.       // Get the object describing the file we would like to stream from disk  
  15.       DownloadFile dFile = DownloadService.GetFileLocationForUid(DownloadUid);  
  16.  
  17.       // Check if we found the file in our system  
  18.       if (dFile != null)  
  19.       {  
  20.         // Now start streaming the contents of the file from disk to the browser using   
  21.         // - The location on disk  
  22.         // - The mime type of the file to get the correct program to handle it on the client computer  
  23.         // - The filename of the file you would like to stream  
  24.         return new SendFileActionResult(dfile.PhysicalLocationOndisk, dFile.MimeType, dFile.Filename);  
  25.       }  
  26.       else 
  27.       {  
  28.         // No file found by the given UID, redirect to the error page  
  29.         return _RedirectToErrorPage();  
  30.       }  
  31.  
  32.     }  
  33.  
  34.     /// <summary>  
  35.     /// Example method to show that you can return ActionResult objects from another method or class  
  36.     /// </summary>  
  37.     /// <returns>The action result to be returned by the view</returns>  
  38.     private ActionResult _RedirectToErrorPage()  
  39.     {  
  40.       // Return a redirect action in case of error  
  41.       return new RedirectActionResult("/Messages/DownloadFailed");  
  42.     }  
  43.   }  

In this example we would like to stream a file from the server to the client browser. In case we couldn't find we redirect to user to an error message page.

Tags:

Development

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


Björn Bailleul

Web application engineer and developer interested in creating customer centric applications build for ease of use and efficiency. My experience goes from intranet applications to widely used service websites, product portfolios and e-commerce websites.

Specialties

C#, MVC, AJAX, ASP.NET, SQL Server, SQL Reporting Services, WCF, XML, HTML, JavaScript, CSS, Web Services, Scrum, ...

View Bjorn Bailleul's profile on LinkedIn

Month List