Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ajax.ActionLink is not POSTing

I am trying to navigate to an MVC action by POSTing rather than GETting. (The action is a DELETE, and I don't want it reachable by an external link.)

I am using a link in a grid generated by

 Ajax.ActionLink("Remove", "Delete", new { saID = Model.Said, id = e.id }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure you want to delete this item?" })

Which generates the following HTML:

<a href="/Equipment/Delete/102424/229933" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, confirm: 'Are you sure you want to delete this item?', httpMethod: 'POST' });">Remove</a>

My problem is that when I click on the link, I am reaching the Delete action via a GET rather than a POST, AND the Confirm dialog is not taking place. I have been googling this for several hours and just keep getting wrapped around the axle. What am I doing wrong?

like image 370
Dave Hanna Avatar asked Jun 17 '10 20:06

Dave Hanna


2 Answers

It's likely that you have some other javascript error on your page that is preventing the javascript that handles the AJAX POST from running. In this case, the link falls back to it's default behavior (GET). The easiest thing to do is use the IE8 developer tools or Firefox/Firebug (I prefer these) and look to see if you have any errors in the console when the page loads or your action is invoked. If you are using IE you'll need to use Internet Options -> Advanced and uncheck Disable script debugging.

Fix your javascript error and I think it will simply start working.

like image 190
tvanfosson Avatar answered Sep 25 '22 02:09

tvanfosson


I wanted to add this as a comment under accepted answer but somehow there is no option to enter this as a comment so adding this as answer

In my case, I had to add "jquery.unobtrusive-ajax.min.js" before MicrosoftAjax.js and MicrosoftMvcAjax.js and then action link started initiating ajax request. But this was a GET and I wanted post so I just added HttpMethod = "Post" in the 'AjaxOptions`. That was it.

like image 36
Suhas Avatar answered Sep 25 '22 02:09

Suhas