05
DecASP.NET MVC - View() vs RedirectToAction() vs Redirect() Methods
There are many ways for returning or rendering a view in ASP.NET MVC. Many developers got confused when to use View(), RedirectToAction(), Redirect() and RedirectToRoute() methods. In this article, I would like to explain the difference among "View()" and "RedirectToAction()", "Redirect()" and "RedirectToRoute()" methods.
The View() Method
This method is used to generates the HTML markup to be displayed for the specified view and sends it to the browser. This acts just like as Server.Transfer() method in ASP.NET WebForm.
public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(string Name) { ViewBag.Message = "Hi, Dot Net Tricks"; //Like Server.Transfer() in Asp.Net WebForm return View("MyIndex"); } public ActionResult MyIndex() { ViewBag.Msg = ViewBag.Message; // Assigned value : "Hi, Dot Net Tricks" return View("MyIndex"); }
What happens if we call the action method directly like return MyIndex(). It is simply a method call which returns a rendered view that is specified in MyIndex() action method.
public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(string Name) { ViewBag.Message = "Hi, Dot Net Tricks"; //Like Server.Transfer() in Asp.Net WebForm return MyIndex(); } public ActionResult MyIndex() { ViewBag.Msg = ViewBag.Message; // Assigned value : "Hi, Dot Net Tricks" return View("MyIndex"); }
The RedirectToAction() Method
This method is used to redirect to specified action instead of rendering the HTML. In this case, the browser receives the redirect notification and make a new request for the specified action. This acts just like as Response.Redirect() in ASP.NET WebForm.
Moreover, RedirectToAction constructs a redirect URL to a specific action/controller in your application and use the route table to generate the correct URL. RedirectToAction causes the browser to receive a 302 redirect within your application and gives you an easier way to work with your route table.
public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(string Name) { ViewBag.Message = "Hi, Dot Net Tricks"; //Like Response.Redirect() in Asp.Net WebForm return RedirectToAction("MyIndex"); } public ActionResult MyIndex() { ViewBag.Msg = ViewBag.Message; // Assigned value : Null return View("MyIndex"); }
The Redirect() Method
This method is used to redirect to specified URL instead of rendering HTML. In this case, the browser receives the redirect notification and make a new request for the specified URL. This also acts like Response.Redirect() in Asp.Net WebForm. In this case, you have to specify the full URL to redirect.
Moreover, Redirect also cause the browser to receive a 302 redirect within your application, but you have to construct the URLs yourself.
public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(string Name) { ViewBag.Message = "Hi, Dot Net Tricks"; //Like Response.Redirect() in Asp.Net WebForm return Redirect("Home/MyIndex"); } public ActionResult MyIndex() { ViewBag.Msg = ViewBag.Message; // Assigned value : Null return View("MyIndex"); }
The RedirectToRoute() Method
This method looks up the specifies route into the Route table that is defined in global.asax and then redirect to that controller/action defined in that route. This also make a new request like RedirectToAction().
Definining Route
public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute( "MyRoute", // Route name "Account/", // URL new { controller = "Account", action = "Login"} // Parameter defaults ); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "MyIndex", id = UrlParameter.Optional } // Parameter defaults ); }
HomeController
public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(string Name) { return RedirectToRoute("MyRoute"); }
AccountController
public ActionResult Login() { return View(); }
Important Note
The View() method doesn't make new requests, it just renders the view without changing URLs in the browser's address bar.
The RedirectToAction() method makes new requests and URL in the browser's address bar is updated with the generated URL by MVC.
The Redirect() method also makes new requests and URL in the browser's address bar is updated, but you have to specify the full URL to redirect
Between RedirectToAction() and Redirect() methods, best practice is to use RedirectToAction() for anything dealing with your application actions/controllers. If you use Redirect() and provide the URL, you'll need to modify those URLs manually when you change the route table.
RedirectToRoute() redirects to a specific route defined in the Route table.
What do you think?
I hope you will enjoy the tips and tricks while programming with ASP.NET MVC. I would like to have feedback from my blog readers. Your valuable feedback, question, or comments about this article are always welcome.
Take our free skill tests to evaluate your skill!

In less than 5 minutes, with our skill test, you can identify your knowledge gaps and strengths.