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.
0 comentarios: