2

I'm trying to use Razor to inject a URL into a Javascript variable, and then redirect the browser to that URL. I need to do it this way as my application is fully AJAX based and I'm redirecting to a Facebook Authentication page.

The view that performs the client-side redirect looks like this:

@model Site.Core.ViewModels.Auth.FacebookCanvasLoginModel

<script type="text/javascript">
    var redirectUrl = '@(Model.FacebookLoginUrl)';

    window.top.location.href = redirectUrl;
</script>

The value of Model.FacebookLogin URL is generated by the Url.Action() helper in MVC.

the problem is that the location that is actually redirected to is:

http://dev.mydomain.net/Auth/RequestPermission?permissions=read_stream%2Cuser_photos&amp;redirectUrl=http%3A%2F%2Fdev.mydomain.net%2Fnewsfeed%3F_%3D1328276903643

which contains &amp;redirectUrl= instead of &redirectUrl=

How do I pass this URL to window.location.href without the & being encoded to &amp; whilst maintaining the redirectUrl as an encoded URL string?

1
  • 1
    What's the code within the FacebookLoginUrl method? What's it returning? It seems like this method is the issue and is adding the encoding when it shouldn't. (By the way, for argument's sake, having <a href="http://site.com/?foo&amp;bar"> with the &amp; is the proper way of generating a URL.) Commented Feb 3, 2012 at 14:46

1 Answer 1

8

You need to get the Raw value so that it doesn't html encode the value.

@Html.Raw(Model.FacebookLoginUrl)

You are putting it inside javascript, and you'll want to escape anything that could goof up your javascript. So try this:

var redirectUrl = @Html.Raw(Json.Encode(Model.FacebookLoginUrl))

For your reference: Json class

Sign up to request clarification or add additional context in comments.

1 Comment

Legend! Thank you!! Happy to have bumped you over 1000 points - I've been stuck on this for hours :-)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.