2012-10-12 132 views
5

Estoy tratando de hacer un sitio web MVC con llamada Ajax. No tengo problemas para usar directamente jquery, pero cuando uso @ Ajax.ActionLink, no obtengo el resultado que quiero. Aquí es mi punto de vista:MVC 4 Ajax.Action link won t work

<script type="text/javascript"> 
     function deleteComment(id) { 
      $.post(
       "/Role/AjaxTest", 
       //{ id: id }, 

       function (data) { 
        $("#testtarget").html(data);    
       }); 
     } 
    </script> 


    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
    <h2>TITLE</h2> 
    <p> 
@Ajax.ActionLink("Ajax Test", "AjaxTest", "Role", new AjaxOptions{UpdateTargetId="testtarget",HttpMethod = "Get" , InsertionMode = InsertionMode.Replace }) 
    </p> 
    <table>  
    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.RoleName) 
      </td> 
      <td> 
       <a onclick="deleteComment('@item.RoleId'); return false;" href="#">Delete</a> 
       @Html.ActionLink("Delete", "Delete", new { id=item.RoleId }) 

      </td> 
     </tr> 
    } 
    </table> 
    <div id="testtarget">Test Div</div> 

y aquí es mi datos Controler:

public string AjaxTest() 
{ 
    return "Some random text"; 
} 

mi llamada en jQuery funciona a la perfección y el texto aparece en el div, pero mi ActionLink sólo me redirecciona a: localhost/Role/AjaxTest así que solo tengo el mensaje en un navegador bancario.

¿Alguna idea de lo que está mal aquí?

¡Muchas gracias de antemano!

+0

¿Estás seguro de que se está cargando el archivo 'jquery.unobtrusive-ajax.min.js'? –

+0

Sí, cuando hago clic en el enlace en mi fuente de la página web: lo abre. – Tom

Respuesta

9

Asegúrese de que ha añadido el guión jquery.unobtrusive-ajax.js a su página:

<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script> 

o si está utilizando paquetes (que es el método recomendado) asegurarse de que ha incluido un paquete que contiene esta secuencia de comandos. Por ejemplo, cuando se crea un nuevo proyecto ASP.NET MVC 4 usando la plantilla de Internet que sería el ~/bundles/jqueryval paquete:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
    "~/Scripts/jquery.unobtrusive*", 
    "~/Scripts/jquery.validate*") 
); 

Así que asegúrese de que está incluido en su opinión después de que el paquete de jQuery:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 

O simplemente combínelas en un único paquete. Todo dependerá de sus requisitos y de si necesita soporte de validación de jquery discreto o no.

También recomendaría que usted tenga su acción de controlador de retorno y no ActionResult cadena:

public ActionResult AjaxTest() 
{ 
    return Content("Some random text"); 
} 
+1

Perfecto, muchas gracias, todo lo que dijo estaba en mi proyecto, simplemente no tenía el @ Scripts.Render ("~/bundles/jqueryval"). Así que lo agregué a mi página y funcionó, ¿es 'sabio' poner esto en la página maestra de diseño? ' Supongo que será usado en muchas páginas. ¡Muchas gracias por tu ayuda! Estaba atrapado en esto por 4 horas como ... – Tom

2

tratar de usar F12 en su navegador y comprobar si sale algún error de secuencias de comandos en la consola. Fiddler también ayudará a identificar si alguna de sus bibliotecas no está referenciada o cargada correctamente.

+0

¡Gracias! Eso fue parte de mi problema, no estaba definido para jquery así que hice lo que sugirió la próxima publicación. – Tom