2011-04-20 35 views
42

Intentando tener un enlace de acción AJAX que al hacer clic, debe hacer un HttpGet a un método de acción que devuelve un PartialViewResult y coloca el código HTML en un div.ASP.NET MVC 3 (Razor) Ajax.ActionLink - ¿Qué estoy haciendo mal?

Aquí es mi opinión:

<div id="admin-options" class="admin"></div> 
@Ajax.ActionLink("Show Admin Options", "ShowOptions", "Post", new { area = "Admin" }, new AjaxOptions { UpdateTargetId = "admin-options", HttpMethod = "GET" }) 

Aquí está el método de acción:

public class PostController : Controller 
{ 
    [HttpGet] 
    [Authorize(Roles="Admin")] 
    public PartialViewResult ShowOptions() 
    { 
     return PartialView(); 
    } 
} 

Aquí está el código HTML que genera:

<a data-ajax="true" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#admin-options" href="/Admin/Post/ShowOptions">Show Admin Options</a> 

se ve bien para mí.

Pero en lugar de hacer una llamada AJAX, realiza un HTTP GET regular a través de la URL del navegador y redirige a /Admin/Post/ShowOptions.

Obviamente me falta algo, pero ¿qué?

Respuesta

66

Asegúrate de tener la discreta biblioteca javascript AJAX incluida en tu página.

<script src="<%=Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")%>" type="text/javascript"></script> 
+2

Argh, eso fue todo. Tenía js discretos pero no AJAX discreto. ¡aclamaciones! – RPM1984

48

Y para aquellos que utilizan el punto de vista motor de la maquinilla de afeitar ...

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
1

También puede incluir la opción InsertionMode en los AjaxOptions. Estoy seguro de que hay un comportamiento predeterminado si lo excluyes, pero es mejor definirlo explícitamente para cosas como esta.

Cuestiones relacionadas