想象一下,我有一个包含多个项目行的HTML表格。对于每个项目,我生成一个“删除”按钮,如下所示:
<% using (Ajax.BeginForm("Delete", "MyController", new { item.Id }, new AjaxOptions { HttpMethod="POST" })) { %>
<input type="submit" class="deletebutton" value="Delete" />
<% } %>
相应的操作如下所示:
[HttpPost]
public JavaScriptResult Delete(int id)
{
var item = _repository.GetById(id);
// [...] actually delete the item
var script = string.Format("OnItemDeleted({0},{1})", item.Id, new JavaScriptSerializer().Serialize(item.Name));
return JavaScript(script);
}
最后,这是执行删除后应该调用的Javascript函数:
function OnItemDeleted(id, name) {
$('#errorlabel').text(name + " deleted successfully.");
$('#tr_item_' + id).fadeOut();
};
我从Steven Sanderson的书“Pro ASP.NET MVC 2 Framework”中得到了这个,并且看到它在我的项目中工作过一次。与此同时,我的很多代码都被更改了,包括对MVC 3的更新,由于某种原因它不再起作用了。单击删除按钮后,将正确调用操作方法,但在此之后,浏览器会在浏览器中显示JavaScript结果,例如:
OnItemDeleted(21,“Fancy Item 1234”)
奇怪的是,我也被重定向到Admin / MyController / Delete / {ItemId},尽管我的删除操作明确表示为[HttpPost]并且没有同名的GET操作。
您是否知道可能导致此行为的原因是什么?提前谢谢!