Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is there no internal Controller redirect in ASP.Net MVC (or CodeIgniter)?

ASP.Net MVC Controllers have several methods of forwarding control to another controller or action. However, all of them cause a client redirect, with a 302 and a new browser request.

Why is there no internal "call another controller's action" functionality, without getting the client involved? I'm pretty sure that the php CodeIgniter framework also lacks this functionality.

The best reason that I can come up with is that ultimately it's unnecessary, since any code you want to call into could be factored out into someplace common, and in ASP.Net MVC at least, the operation might be quite expensive. But a lot of people ask about this, and it seems like it would ultimately be a convenience.

So... lots of smart people designed these frameworks. There must be some good reasons for not having this?

like image 317
womp Avatar asked Sep 08 '09 20:09

womp


People also ask

How can I redirect a URL to another URL in ASP NET MVC?

You can use any of the following methods to return a RedirectResult: Redirect – Http Status Code 302 Found (temporarily moved to the URL provided in the location header) RedirectPermanent – Http Status Code 301 Moved Permanently. RedirectPermanentPreserveMethod – Http Status Code 308 Permanent Redirect.

What is redirect to action in MVC?

RedirectToAction(String, Object) Redirects to the specified action using the action name and route values. RedirectToAction(String, String) Redirects to the specified action using the action name and controller name.

How do I redirect a controller?

Use this: return RedirectToAction("LogIn", "Account", new { area = "" }); This will redirect to the LogIn action in the Account controller in the "global" area.

How does redirect to action work?

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.


2 Answers

In Codeigniter you can set custom routes and stuff to direct certain URLs to other controllers/actions, but I think you mean in the middle of a controller function to jump into another?

If there is any business logic you have, especially if it's going to be reused, it should go into a model, not a controller. You can also specify different views in a controller depending on some condition or something. If you have repeating code that doesn't 'fit' into a model, then it should probably end up as a static helper function, or in a library class.

So yeah, I think you're right on when you say:

The best reason that I can come up with is that ultimately it's unnecessary, since any code you want to call into could be factored out into someplace common

This forces you into staying within the MVC pattern.

Best to keep your controllers lightweight anyways.

like image 181
Matthew Rapati Avatar answered Sep 29 '22 00:09

Matthew Rapati


Well, at least in ASP.NET MVC, controller actions are just C# methods called in creative ways. So you can just explicitly call another controller action, like so:

Sample controller:

public class SampleController : Controller
{
   public ActionResult Foo()
   {
      return View("foo");
   }

   public ActionResult ShowMeFoo()
   {
      return Foo();
   }
}

Now, I think in most cases one wouldn't want to do this. Considering urls as a RPC interface for your app, it should forward to a different url when getting different results. Doesn't apply to all cases, but can appy to most.

like image 44
Wyatt Barnett Avatar answered Sep 29 '22 00:09

Wyatt Barnett