I’ve looked at the previously-posted jQuery/MVC questions and haven’t found a workable answer.
I have the following JavaScript code:
$.ajax({ type: "POST", url: '@Url.Action("Search","Controller")', data: "{queryString:'" + searchVal + "'}", contentType: "application/json; charset=utf-8", dataType: "html", success: function (data) { alert("here" + data.d.toString()); } });
When calling the Url the post looks like:
NetworkError: 500 Internal Server Error - <a href="http://localhost/Web/Navigation/@Url.Action(%22Search%22,%22Chat%22)"></a>
Why does it return it like this (the logic behind it) and what’s a solution?
P.S.: Additional Information: %22 is the URL Encoding Reference for <<“>> character
Advertisement
Answer
In order for this to work that JavaScript must be placed within a Razor view so that the line
@Url.Action("Action","Controller")
is parsed by Razor and the real value replaced.
If you don’t want to move your JavaScript into your View you could look at creating a settings object in the view and then referencing that from your JavaScript file.
e.g.
var MyAppUrlSettings = { MyUsefulUrl : '@Url.Action("Action","Controller")' }
and in your .js file:
$.ajax({ type: "POST", url: MyAppUrlSettings.MyUsefulUrl, data: "{queryString:'" + searchVal + "'}", contentType: "application/json; charset=utf-8", dataType: "html", success: function (data) { alert("here" + data.d.toString()); } });
or alternatively look at levering the framework’s built in Ajax methods within the HtmlHelpers which allow you to achieve the same without “polluting” your Views with JS code.