¿Traducir MVC Ajax.ActionLink al método jQuery .post?

Estoy lidiando con este problema de ASP.NET MVC de que el uso de ValidateAntiForgeryToken con AJAX interrumpe la llamada AJAX ( Uso de ValidateAntiForgeryToken con Ajax.ActionLink ). La única solución (como se indica en ese tema) requiere jQuery.

¿Cómo hago el equivalente de lo siguiente con el método .post de jQuery?

@Ajax.ActionLink("Perform HTTPPost", "PostTest", new AjaxOptions{ HttpMethod="POST"}) 

Aquí está el controlador:

 // [ValidateAntiForgeryToken] public class MoreInfoController : Controller { [HttpPost] public ActionResult PostTest() { return View(); } } 

Aquí está el índice VIEW con Javascript y HTML:

   $(document).ready(function () { $('#linkToPost').click(PostForm); }); function PostForm() { $.post("/PostTest", $('#testForm').serialize(), function(data) { }); return false; }  Perform HTTP Post  @Html.AntiForgeryToken()  

Y aquí está la Ruta:

 routes.MapRoute("PostTest1", "PostTest", new {controller = "MoreInfo", action = "PostTest"} ); 

Mi ejemplo es usar $ .ajax pero puede cambiarlo fácilmente a $ .post

 @Html.ActionLink("Perform HTTP Post", "PostTest", "Controller", null, new { id = "someId" })  

Si no desea asignar una identificación al ancla, puede usar un selector de clase:

 $('.ajax-link').click(function() { ... }); 

En lugar de hacer el new { id = "someId" } , necesitarías hacer un new { @class = "ajax-link" } o lo que sea que quieras para que tu clase sea nombrada.

editar
Estaba usando la sobrecarga equivocada. Estaba intentando establecer el ID para el atributo html, no los datos de ruta.

Suponiendo que su elemento token anti falsificación esté en la forma que desea publicar, puede hacer lo siguiente:

Aquí está su enlace:

 Perform HTTP Post 

Aquí está el jquery para enlazar el clic de este enlace para publicar el formulario:

  

Ahora, lo que debe hacer es reemplazar #idOfYourForm con la ID real de su formulario:

lo haría $('#TestForm').serialize()

A continuación, debe asegurarse de que la ruta que tengo de /PostTest se /PostTest a su controlador y acción. Necesitarás algo como esto:

 context.MapRoute("PostTest1", "PostTest", // URL with parameters new { controller = "MoreInfoController", action = "PostTest" }); 

Eso es.

Esto funciona:

 [UseAntiForgeryTokenOnPostByDefault] public class MoreInfoController: Controller { [HttpPost] [ValidateAntiForgeryToken] public ActionResult PostTest() { return View(); } } 

Y la vista:

 @using (Html.BeginForm("PostTest", "MoreInfo") { @Html.AntiForgeryToken()  } 

donde [UseAntiForgeryTokenOnPostByDefault] es http://weblogs.asp.net/srkirkland/archive/2010/04.aspx