web-dev-qa-db-fra.com

ASP.NET MVC 3 (Razor) Ajax.ActionLink - Qu'est-ce que je fais mal?

Essayer d'avoir un lien d'action AJAX qui, lorsqu'il est cliqué, devrait faire un HttpGet à une méthode d'action qui renvoie un PartialViewResult et place le HTML dans un div.

Voici mon point de vue:

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

Voici la méthode d'action:

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

Voici le code HTML qu'il génère:

<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>

Ça me va bien.

Mais au lieu de faire un appel AJAX, il effectue un HTTP GET régulier via l'URL du navigateur et redirige vers / Admin/Post/ShowOptions.

De toute évidence, je manque quelque chose - mais quoi?

42
RPM1984

Assurez-vous que la bibliothèque javascript AJAX javascript inclus dans votre page est discrète).

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

Et pour ceux qui utilisent le moteur de visualisation Razor ...

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

Vous pouvez également souhaiter inclure l'option InsertionMode dans les AjaxOptions. Je suis sûr qu'il y a un comportement par défaut si vous l'excluez mais il vaut mieux le définir explicitement pour des choses comme ça.

1
Nick Albrecht