Empiezo esta semana a blogear (valga el anglicismo) no sólo aquí, sino que también en el blog que me brinda Southworks, mi nuevo empleador. Se pueden dar una vuelta (por ahora está vacío) y también conocer todas los otros muy interesantes posts de los distintos compañeros.

Mariano Koldobsky en Southworks

Blogs de Southworks

getJson desde Asp.Net MVC
11:07 | Author: Unknown

Muchas veces utlizando Asp.Net MVC nos encontramos con la necesidad de acceder a resultados de nuestros metodos del controller, pero no queremos realizar un POST al server. Una buena opción es el llamado de JQuery utilizando la función getJson.

Vamos a llamar a un servicio que nos devuelve una definición de diccionario de una palabra en inglés.
La vista es super elemental tiene un ingreso de palabra (no estamos validando nada en este ejemplo, tampoco estamos testeando, lo cual seria un interesante posteo. Cómo testeo una llamada de AJAX?) y un botón para buscar la definición.

View
    <button id="btnDefine" name="btnDefine">
Define</button>
<br />
<%= Html.TextBox("tbxWord") %>
<%= Html.TextArea("txtDefinition") %>
<div id="loading">
Loading</div>

<script type="text/javascript">

$(document).ready(function() {
$(function() {
$("#loading").hide();
$('#btnDefine').click(function() {
$("#loading").ajaxStart(function() {
$("#loading").show();
});
wordIn = $("#tbxWord").val();
$.getJSON("/Home/GetDefinition", { word: wordIn }, function(data) {
$("#txtDefinition").text(data);
});
});
$("#loading").hide();
});
});


</script>




La línea getJson tiene como parametros el ruteo del método del controller, el parámetro del método (en este caso la palabra a buscar) y una función de callback que se llamará cuando vuelve del llamado AJAX, en este caso sólo setea el testo de la definición.


 


 


Controller
        public JsonResult GetDefinition(string word)
{
DictService dictionary = new DictService();
if (word == null) return null;
var result = dictionary.Define(word);
return Json(result.Definitions[0].WordDefinition, JsonRequestBehavior.AllowGet);
}
En el caso del método del controller llamado, sólo tenemos que tener en cuenta devolver un JsonReesul 
y utilizar la clase Json para serializar lo que devolvemos.
Es un buen comienzo.