2012-07-15 86 views

回答

9

ActionLink辅助方法会呈现一个anchor标记,点击哪个总是一个GET请求。如果你想使它成为POST请求。你应该用一个小javacsript现在

@ActionLink("Delete","Delete","Item",new {@id=4},new { @class="postLink"}) 

一些jQuery代码覆盖默认behviour

<script type="text/javascript"> 
    $(function(){ 
    $("a.postLink").click(function(e){ 
     e.preventDefault(); 
     $.post($(this).attr("href"),function(data){ 
      // got the result in data variable. do whatever you want now 
      //may be reload the page 
     }); 
    });  
    });  
</script> 

请确保您有HttpPost类型的Action方法来处理这个请求

[HttpPost] 
public ActionResult Delete(int id) 
{ 
    // do something awesome here and return something  
} 
4

我会做的是包装你周围的HTML表单

@using(Html.BeginForm("YourAction","YourController", FormMethod.Post)){ 

<button>Hello</button> 

} 

而不是使用链接,您可能需要使用一个按钮。

如果你真的想用一个链接,你可能需要一些JavaScript

事情是这样的:

$("#idOfYourLink").click(function(){ 
var form = $(this).parents('form:first'); 
form.submit(); 
}); 
0

如果你觉得...有在HTML链路没有标签,做了POST。这就是为什么你不能强制链接进行POST(而且没有任何意义)。 要使用“POST”,你应该“发布”一些东西。那东西应该是一种形式,或者你可以使用AJAX的javascript函数进行POST。 无论如何,如果你需要发布没有发布任何东西,你应该检查你的资源模型,有些东西很臭。

+0

这实际上在Rails社区中非常常见并且完全可以接受,例如作为de lete物体。 – wgpubs 2012-07-17 04:43:50

1

不可能让<a>元素执行POST到Web服务器。

您可以使用Javascript捕获单击事件,停止导航并执行AJAX POST到服务器,但是如果用户禁用Javascript,则不会发生任何事情。

你必须使用一个<a>元素,或者只是一些类似于一个<a>元素?

另外值得一提的是看看AjaxLink。它允许您轻松使用<a>元素来执行AJAX POST。

7

我想,如果你需要的东西是一个行动,将在服务器端做一些“永久”的东西。例如,删除数据库中的对象。

下面是使用一个链接,发布执行删除的完整例子:(recomended读取反正) http://www.squarewidget.com/Delete-Like-a-Rock-Star-with-MVC3-Ajax-and-jQuery

从以前的链接:

在视图中删除链接:

@Ajax.ActionLink("Delete", "Delete", "Widget", 
       new {id = item.Id}, 
       new AjaxOptions { 
        HttpMethod = "POST", 
        Confirm = "Are you sure you want to delete this widget?", 
        OnSuccess = "deleteConfirmation" 
       }) 

JS的位:

function deleteConfirmation(response, status, data) { 

     // remove the row from the table 
     var rowId = "#widget-id-" + response.id; 
     $('.widgets').find(rowId).remove(); 

     // display a status message with highlight 
     $('#actionMessage').text(response.message); 
     $('#actionMessage').effect("highlight", {}, 3000); 
    } 
+1

伟大的链接。希望我可以将2个答案标记为正确的,所以希望upvote就足够了。谢谢 – wgpubs 2012-07-17 04:45:45

+0

该链接不再工作 – 2013-04-26 08:16:16

+0

链接已更新... – Romias 2013-04-26 12:52:08

相关问题