0

在我的控制器中,我尝试了类似的方法:

    [HttpDelete, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Movie movie = db.Movies.Find(id);
        db.Movies.Remove(movie);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

点击后,转向没有访问上面的方法。如果有什么遗漏?也许问题出在带有 html 代码的视图中。我正在使用标准格式,例如:

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <p>
        <input type="submit" value="Delete" formmethod="delete"/> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}

我也试过Html.BeginForm("Delete", "Action", FormMethod.Delete),但 IntelliSense 不支持(它显示只有 FormMethod.Get 和 FormMethod.Post)。

据我所知,Delete 方法正是用来操作要从数据库中删除的对象。如果我是对的,你能解释一下吗?如果不是 - 为什么?如果是 - 请告诉我,如何实现该方法的好方法。

4

2 回答 2

3

HttpMethodOverride添加到您的BeginForm()调用中:

@using (Html.BeginForm()) {
    @Html.HttpMethodOverride(HttpVerbs.Delete)
    @Html.AntiForgeryToken()
    <p>
        <input type="submit" value="Delete" formmethod="delete"/> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}
于 2013-09-20T12:31:09.617 回答
2

我认为没有必要将您的操作限制在HttpDelete您的场景中。改为使用HttpPost,一切都会正常工作。

如果您决定使用该方法,那么您的表单应该用于HttpDelete将请求发送到服务器。

HttpDelete更适合 REST Api,我认为在您的情况下,您不会因该限制而受益。

于 2013-09-20T12:30:42.927 回答