ASP.NET JSON WebService Port to MVC Controller
April 27, 2010 1 Comment
I want to learn a bit more about JQuery serialization so I worked though this working example.
I got the ASP.NET Web Service solution up and running no problem.
I then ported it over to a MVC solution.
The first thing I did was to set up the controller and the routing to handle incoming requests – basically replacing the web service from the original solution:
Here is the controller:
public class WeatherController : Controller
{
private readonly static string FindNearByWeatherUrl =
"http://ws.geonames.org/findNearByWeatherJSON?lat={0}&lng={1}&username={2}";
public JsonResult GetWeatherByLocation(double latitude, double longitude)
{
JsonResult jsonResponse = new JsonResult();
string formattedUri = String.Format(CultureInfo.InvariantCulture, FindNearByWeatherUrl, latitude, longitude, "fatbgr");
Uri serviceUri = new Uri(formattedUri, UriKind.Absolute);
HttpWebRequest httpWebRequest = WebRequest.Create(serviceUri) as HttpWebRequest;
if (httpWebRequest != null)
{
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
string readerResponse = string.Empty;
using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
{
readerResponse = streamReader.ReadToEnd();
}
jsonResponse.Data = readerResponse;
}
return jsonResponse;
}
}
Here is the routing:
routes.MapRoute(
"WeatherRoute",
"Weather/GetWeatherByLocation/{latitude}/{longitude}",
new { controller = "Weather", action = "GetWeatherByLocation"}
);
And here is the javascript that I use to call the controller:
function CallService() {
var latitude = "35.797153";
var longitude = "-78.886546";
var postData = { latitude: latitude, longitude: longitude };
$.ajax({
type: "POST",
url: "/Weather/GetWeatherByLocation",
data: postData,
dataType: "json",
success: function (msg) {
GetWeather_Success(msg);
}
});
}
Everything is working fine in terms of the Json exchange – Wahoo!
However, I was blindsided by the Jquery selectors. When I replace the hard-coded values for latitude and longitude with some JQuery, the variables are null:
var latitude = $("txtLatitude").val;
var longitude = $("txtLongitude").val;
Here is how the controls are created on the form
<p>
<input type="text" id="txtLatitude" value = "35.797153" />
<input type="text" id="txtLongitude" value = "-78.886546" />
<input type= "button" value="Get Weather Info" onclick="CallService();" />
</p>
Note that I also try and stuff the result set into the div – but that also is not being recognized
$("#divResult").html = e.toString();
I am at a loss – why aren’t the JQuery selectors working???
Update – I am a coconut head. I am treating the javascript functions like properities and they are silently failingChanging$("#divResult").html = e.toString();To$("#divResult").html() = e.toString();Did the trick