ASP.NET MVC3 AJAX POST:结果在浏览器中呈现而不是被执行

时间:2011-05-07 15:59:39

标签: jquery ajax asp.net-mvc-3 http-post

想象一下,我有一个包含多个项目行的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操作。

您是否知道可能导致此行为的原因是什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

想出来:我使用的是MVC 2中的旧Microsoft JavaScript库。 Replacing those解决了这个问题。