2011-07-07 21 views

Respuesta

13

Personalmente no me gustan los ayudantes Ajax.*. En ASP.NET MVC < 3 contaminan mi HTML con javascript y en ASP.NET MVC 3 contaminan mi HTML con HTML 5 data-* atributos que son totalmente redundantes (como la url de un anclaje). Además, no analizan automáticamente los objetos JSON en las devoluciones de llamada exitosas, de lo que se trata su pregunta.

Yo uso normal Html.* ayudantes, así:

@Html.ActionLink(
    "click me",   // linkText 
    "SomeAction",   // action 
    "SomeController",  // controller 
    null,     // routeValues 
    new { id = "mylink" } // htmlAttributes 
) 

que obviamente generar normales HTML:

<a href="/SomeController/SomeAction" id="mylink">click me</a> 

y que yo discretamente AJAXify en archivos JavaScript distinto:

$(function() { 
    $('#mylink').click(function() { 
     $.post(this.href, function(json) { 
      // TODO: Do something with the JSON object 
      // returned the your controller action 
      alert(json.someProperty); 
     }); 
     return false; 
    }); 
}); 

Suponiendo que siguiente acción del controlador:

[HttpPost] 
public ActionResult SomeAction() 
{ 
    return Json(new { someProperty = "Hello World" }); 
} 

ACTUALIZACIÓN:

como se solicita en la sección de comentarios aquí está cómo hacerlo utilizando los Ajax.* ayudantes (repito una vez más, esto es sólo un ejemplo de cómo esto podría ser logrado y absolutamente no es algo que recomiendo, véase mi respuesta inicial para mi solución recomendada):

@Ajax.ActionLink(
    "click me", 
    "SomeAction", 
    "SomeController", 
    new AjaxOptions { 
     HttpMethod = "POST", 
     OnSuccess = "success" 
    } 
) 

y el interior de la devolución de llamada de éxito:

function success(data) { 
    var json = $.parseJSON(data.responseText); 
    alert(json.someProperty); 
} 
+0

¿Hay alguna manera de hacerlo con un Ajax. * Ayudante, sin embargo? ¿Hay alguna desventaja real al tener esos atributos de datos (porque estoy usando MVC 3)? – user558594

+0

@ user558594, sí, hay una manera. Especifica una devolución de llamada 'OnSuccess' en' AjaxOptions'. En esta devolución de llamada, puede analizar el JSON: 'function success (data) {var json = $ .parseJSON (data.responseText); } ' Ver mi respuesta actualizada. –

+0

Correcto, pero ¿cuál es exactamente la desventaja si haces esto en MVC 3? Los atributos de datos redundantes no se agregarían significativamente al tamaño del archivo que el usuario descargaría en el navegador. – user558594

Cuestiones relacionadas