是否有可能强制@Html.ActionLink()
执行POST
而不是GET
?如果可以,如何操作?
是否有可能强制@Html.ActionLink()
执行POST
而不是GET
?如果可以,如何操作?
ActionLink
助手方法将呈现一个anchor
标签,点击它总是会发起一个GET
请求。如果您想要将其变成一个POST
请求,您应该使用一些JavaScript来覆盖默认行为。
@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>
请确保您有一个HttpPost
类型的Action
方法来处理此请求。
[HttpPost]
public ActionResult Delete(int id)
{
// do something awesome here and return something
}
@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"
})
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);
}
@using(Html.BeginForm("YourAction","YourController", FormMethod.Post)){
<button>Hello</button>
}
如果您想要使用按钮而非链接,可以考虑使用按钮元素。
如果您确实需要使用链接,您可能需要一些JavaScript代码。
类似于以下内容:
$("#idOfYourLink").click(function(){
var form = $(this).parents('form:first');
form.submit();
});
一个 <a>
元素不可能执行 POST 到 Web 服务器。
你可以使用 JavaScript 来捕获点击事件,停止导航,并执行 AJAX POST 到服务器,但如果用户禁用了 JavaScript,什么也不会发生。
你必须使用一个 <a>
元素吗?还是只需要类似于 <a>
元素的东西?
另外值得一提的是看看 AjaxLink
。它允许您轻松地使用 <a>
元素执行 AJAX POST。
如果你认为...在HTML中没有标签可以执行POST。这就是为什么你不能强制链接执行POST(而且这毫无意义)。 要使用“POST”,你应该“POST”一些东西。那个东西应该是一个表单,或者你可以使用一个用于AJAX的javascript函数进行POST。 无论如何,如果你需要POST而不提交任何内容,你应该检查你的资源模型,有些地方可能出了问题。