6

是否可以强制 a@Html.ActionLink()做 aPOST而不是 a GET?如果是这样,怎么做?

4

5 回答 5

9

ActionLinkhelper 方法将呈现一个anchor标签,点击它总是一个GET请求。如果你想提出POST请求。您应该使用一点 javacsript 覆盖默认行为

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

现在一些jQuery代码

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

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

[HttpPost]
public ActionResult Delete(int id)
{
  // do something awesome here and return something      
}
于 2012-07-15T02:16:54.210 回答
8

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

这是使用链接和发布进行删除的完整示例: 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);
    }
于 2012-07-15T01:59:22.373 回答
4

我要做的是将你的 html 包裹在一个表单上

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

<button>Hello</button>

}

您可能想要使用按钮,而不是使用链接。

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

像这样的东西:

$("#idOfYourLink").click(function(){
var form = $(this).parents('form:first');
form.submit();
});
于 2012-07-15T00:33:03.163 回答
1

It's not possible to have a <a> element perform a POST to a web server.

You can use Javascript to capture the click event, stop the navigation, and perform an AJAX POST to the server, but if the user has Javascript disabled nothing will happen.

Do you have to use a <a> element, or just something that resembles a <a> element?

Also worth mentioning is to have a look at AjaxLink. It allows you to easily use a <a> element to perform an AJAX POST.

于 2012-07-15T01:22:55.640 回答
0

如果您认为... HTML 中没有用于 POST 的链接标签。这就是为什么您不能强制链接进行 POST(这没有任何意义)。要使用“POST”,你应该“POST”一些东西。这应该是一个表单,或者你可以使用 AJAX 的 javascript 函数进行 POST。无论如何,如果您需要在不发布任何内容的情况下发布,您应该查看您的资源模型,有些东西很臭。

于 2012-07-15T01:03:52.853 回答