调用POST ActionResult时找不到

时间:2017-01-03 10:21:48

标签: jquery asp.net-mvc sitecore sitecore8 sitecore-mvc

我有以下脚本删除项目,当我点击按钮时我调用该功能。

Jquery的

function deleteGadget(guid) {
    if (confirm("Delete selected gadget?")) {
        $.ajax({
            url: "/ManageGadget/Delete?id=" + guid,
            type: "POST",
            success: function (data) {
                if (data.message == "1") {
                    alert("Deleted");
                } else {
                    alert("Something is wrong");
                }
            }
        });
    }
}

行动方法

[HttpPost]
public void Delete(string id) {
    repo.DeleteGadget(id);
}

按钮

<button type="button" class="btn btn-danger btn-xs" 
    onclick="deleteGadget('84640690-9563-418A-AF68-D1823D5EB23D');">
    <span class="glyphicon glyphicon-trash"></span>
</button>

但是,每次我点击按钮都会返回404错误。

获取http://gadgetsitecore/sitecore/service/notfound.aspx?item=%2fmanagegadget%2fdelete&user=extranet%5cAnonymous&site=website 404(未找到)

我有以下RouteConfig

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您应该在路由表中为路由添加正确的控制器名称,您现在拥有的只有主页控制器:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

但是在你的ajax调用中,你正在调用另一个名为 ManageGadget 的控制器:

url: "/ManageGadget/Delete?id=" + guid

所以你需要添加另一条这样的路线:

routes.MapRoute("ManageGadget", "ManageGadget/Delete",
new {controller = "ManageGadget", 
action ="Delete",
id=UrlParameter.Optional});