Ehsan Ghanbari

Experience, DotNet, Solutions

ActionResult types in Asp.net MVC

Controller actions return the ActionResult and it's possible to return kinds of results based on what we want in the output, let’s consider for types of a result in my example in this article.

ActionResult: it just Initializes a new instance of the ActionResult class. ActionResult is the base class for other types of action.

 

        //Action Result
        public ActionResult Index()
        {
            return Content("this is the route of the application defined in Gloabal.asax");
        }

        public ActionResult ActionResult()
        {
            return View();
        }

        //returns a hard coded content
        public ActionResult ActionResult2()
        {
            return Content("this is the content of ActionResult, you can return any text by using it!");
        }

        //returns to another action
        public ActionResult ActionResult3()
        {
            return RedirectToAction("ActionResult2");
        }

        //returns to the Route acion
        public ActionResult ActionResult4()
        {
            return RedirectToRoute("Index");
        }

        public ActionResult ActionResult5()
        {
            return File("Silverlight.js", "text/javascript");
        }

 

ViewResult: It returned as a controller action and Renders a specified view to the response stream

 

        //View Result
        public ViewResult ViewResult(string name)
        {
            if (name == null) throw new ArgumentNullException("name");
            name = "Ehsan";
            return View("ViewResult", name);
        }

 

 PartialViewResult: renders a specified partial view to the response stream

 

        public ActionResult PartialViewResult()
        {
            return PartialView("PartialView");
        }

        public PartialViewResult PostMyForm(SampleModel model)
        {
            if (ModelState.IsValid)
            {
                //TODO:  something with model data
            }
            return PartialView("_UserPartialView", model);
        }

​​​​​​​

 

ContentResult: The content result lets you define whatever content you wish to return. You can just use the ContentResult to return a plain string, Writes content to the response stream without requiring a view

 

        public ContentResult ContentResult()
        {
            return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
        }

        public ContentResult ContentResult2()
        {
            string fileName =
            Server.MapPath(@"~\Content\Ehsan.xml");
            TextReader tr = new StreamReader(fileName);
            string contents = tr.ReadToEnd();
            return Content(contents, "text/xml");
        }

 

 EmptyResult:  it just returns An empty response

 

       public ActionResult StalemateResult()    
       {
            return new EmptyResult();
       }

 

FileResult: It used to send files as the response. And in the case of sending the file by name you should use FilePathResult

 

        public FileStreamResult GetFile()
        {
            const string name = "Ehsan.txt";
            var info = new FileInfo(name);
            if (!info.Exists)
            {
                using (var writer = info.CreateText())
                {
                   //Do somthings
                }
            }
            return File(info.OpenRead(), "text/plain");
        }

​​​​​​​​​​​​​​

 

 HttpNotFoundResult: it's the same 404 not found 

 

        //HttpNotFound
        public ActionResult Details(int id)
        {
            var somthing = "get somthing from repository!";
            if (somthing == null)
            {
                return new HttpNotFoundResult("Sorry, Not Found");
            }
            else
            {
                return View("Details");
            }
        }

 

HttpUnauthorizedResult: 401 Error

 

        public new void OnAuthorization(AuthorizationContext filterContext)
        {
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.Result = new HttpUnauthorizedResult();
            }
            else
            {
                //do somthing else
            }
        }

 

JavaScriptResult: It used to return a javascript by action! it has the ContentType hardcoded to "application/x-javascript" and just writes out the Script property.

 

        public JavaScriptResult JavaScriptResult(ControllerContext context)
        {
            HttpResponseBase response = context.HttpContext.Response;
            response.ContentType = "application/x-javascript";
            return View();
        }

        public JavaScriptResult TestJavaScript()
        {
            string s = "$('#divResultText').html('JavaScript Passed');";
            return JavaScript(s);
        }

 

JsonResult: it uses a hardcoded JavaScriptSerializer to serialize the JSON data

 

        public JsonResult JsonResult()
        {
            return Json("this will be downloaded if you wait a sec!", JsonRequestBehavior.AllowGet);
        }

        public ActionResult JsonResult2(Guid roleId)
        {
            var actions = Enumerable.Range(1, 5).Select(x => x.ToString(CultureInfo.InvariantCulture)).ToList();
            return Json(actions);
        }

        public JsonResult JsonResult3()
        {
            var lists = new List<ListItem>() {
        
             new ListItem() { Value = "2", Text = "NONONO" },
             new ListItem() { Value = "3", Text = "YESYESYES" }
         };
            return Json(lists);
        }

 

RedirectToResult: Performs an HTTP redirection to a specified URL

 

        public ActionResult Index()
        {
               return Redirect("http://www.google.com");
        }

 

 RedirectToRouteResult: Performs an HTTP redirection to a URL that is determined by the routing engine, based on given route data

 

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            if (!UserIsAuthenticated())
            {
                // Redirect to login page
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary
                    {
                        { "controller", "Login" }
                    });
            }
        }

 

 FilePathResult: Returns a file to the client

 

        public ActionResult FilePathResult()
        {
            foreach (string upload in Request.Files)
            {
                string path = AppDomain.CurrentDomain.BaseDirectory + "Images/";
                string filename = Path.GetFileName(Request.Files[upload].FileName);
                Request.Files[upload].SaveAs(Path.Combine(path, filename));
            }
            return View();
        }

 

About Me

Ehsan Ghanbari

Hi! my name is Ehsan. I'm a developer, passionate technologist, and fan of clean code. I'm interested in enterprise and large-scale applications architecture and design patterns and I'm spending a lot of my time on architecture subject. Since 2008, I've been as a developer for companies and organizations and I've been focusing on Microsoft ecosystem all the time. During the&nb Read More

Post Tags
Pending Blog Posts
Strategic design
Factory Pattern
time out pattern in ajax
Selectors in Jquery
Peridic pattern
How to use PagedList In asp.net MVC
Redis as a cache server
Domain driven design VS model driven architecture
How to query over Icollection<> of a type with linq
What's the DDD-lite?
comments powered by Disqus