Jason Dias
Jason Dias

Reputation: 771

MVC Response.Redirect not working

I have a method inside MVC Controller which is called from href inside anchor tag.

public ActionResult DoSomething(string value)
{
    if(true)
    {
        return new RedirectResult("http://google.com");
    }
}

when I debug and hit that method Response.Redirect does nothing no exceptions either. any ideas? Thanks in advance!

Upvotes: 1

Views: 9813

Answers (2)

Octopoid
Octopoid

Reputation: 3698

There are a few things you need to do here to avoid all these issues.

Starting with the AJAX errors you're getting, they most like relate to the javascript debugger, which Microsoft refer to as "BrowserLink".

If you use Firefox or Chrome, this feature simply doesn't work, which is probably the easiest way to avoid the issue, however you can disable the feature here:

Visual Studio 2013 - Browser Link

You can change the default browser to run the website in just to the left.


In terms of Response.Redirect, I think that's been well covered, you should use return Redirect() instead, however your code needs to be refactored to allow for that.

Assuming that method is a helper method which is required to be separate from the controller itself, there are a couple of main approaches to doing what you're trying to to do.

1) Magic Values

This could include "redirect1" or also commonly null, and would look something like:

public ActionResult MyAction
{
    string data = ProcessString("some data");

    if (data == null) { return Redirect("google.com"); }
}

public string ProcessString(string input)
{
    if (condition) { return null; }
    string output = input + "!"; // or whatever you need to do!
    return input;
}

2) Handle via exceptions

Assuming the problem is that the data is in some way bad, and you want to redirect away because you cant process it, Exception handling is most likely the way to go. It also allows for different types of exceptions to be raised by a single method and handled independently without having magic values which then can't be used as normal data.

public ActionResult MyAction
{
    string data; // remember this will be null, not "" by default

    try
    {
        data = ProcessString("some data");
    }
    catch (OwlMisalignedException ex)
    {
        return RedirectToAction("Index", "Error", new { exData = ex.Code });
    }

    // proceed with controller as normal
}

public string ProcessString(string input)
{
    if (condition) 
    {
        throw new OwlMisalignedException(1234);
        // this is (obviously) a made up exception with a Code property 
        // as an example of passing the error code back up to an error 
        // handling page, for example.
    }

    string output = input + "!"; // or whatever you need to do!
    return input;
}

By using that approach you can effectively add extra return states to methods without having to fiddle with your return type or create loads of magic values.

Don't use throw Exception - either use one of the more specific types ArgumentException and ArgumentNullException will probably come in handy, or create your own types if needs be.

You'll find info on creating your own Exception types on here easily enough.

Upvotes: 0

vmg
vmg

Reputation: 10566

Use Redirect

return Redirect("http://www.google.com");

Response.Redirect is not preferred way of doing redirects in asp.net mvc

Response.Redirect and ASP.NET MVC – Do Not Mix

Update: It seems that you are trying to redirect ajax request. If you redirect ajax request, your main page won't be redirected.

Upvotes: 4

Related Questions