【问题标题】:How can I post witin a controller to a delete function?如何在控制器中发布到删除功能?
【发布时间】:2023-03-14 01:10:01
【问题描述】:

我有一个标准(CRUD 生成)删除函数

// GET: Posts/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Post post = db.Posts.Find(id);
            if (post == null)
            {
                return HttpNotFound();
            }
            return View(post);
        }

        // POST: Posts/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Post post = db.Posts.Find(id);
            db.Posts.Remove(post);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

我想像这样在控制器中调用它

if (totalVotes <= 5 && voteValue == -1)
{
    Delete(postId); //NOT WORKING
}

但这让我获得了 Delete GET 功能。猜猜我必须在控制器中发帖,但是怎么做?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 controller crud


    【解决方案1】:

    将删除代码移动到一个方法中,并根据需要从多个方法中调用它。

    public ActionResult DeleteConfirmed(int id)
    {
        DeletePost(id);            
        return RedirectToAction("Index");
    }
    
    private void DeletePost(int id)
    {
        Post post = db.Posts.Find(id);
        db.Posts.Remove(post);
        db.SaveChanges();            
    }
    

    以及在同一个控制器中的其他方法

    if (totalVotes <= 5 && voteValue == -1)
    {
        DeletePost(postId); 
    }
    

    请注意,DeletePost 方法不返回任何内容。所以你的调用方法必须返回一些响应(如果该方法的返回类型不是 void)

    【讨论】:

    • DeleteConfirmed 永远不会被调用。什么时候使用?在没有 [HttpPost] 和 [ValidateAntiForgeryToken] 的情况下执行这样的删除功能是否安全?
    • 你不直接调用私有DeletePost方法?它将从另一个方法调用(例如:DeleteConfirmed 操作方法)
    • 对不起,我不明白。您从 if 语句中调用函数 DeletePost,但从未 DeleteConfirmed。但是您从 DeleteConfirmed 调用 DeletePost。我应该使用 DeleteConfirmed(postId) 吗?
    • 正如我在答案中解释的那样,您可以从此类中的任何其他方法(包括 deleteconfirm)中调用它。在问题中,您没有提到您的 if 语句在哪里!
    • 我有一个“标准”删除功能,可以从视图中删除帖子(生成的 CRUD)。我还有一个像 stackoverflow 一样的投票功能(在同一个控制器中),我想删除一个帖子,具体取决于下一个投票(if 语句)。当然我可以将删除代码放在 if 语句中,但感觉我已经有一个删除 post 功能,我认为重用它会更好。
    猜你喜欢
    • 2023-04-03
    • 2017-05-04
    • 2016-11-01
    • 2015-09-04
    • 2018-01-15
    • 1970-01-01
    • 2015-02-06
    • 2014-12-24
    • 2023-03-03
    相关资源
    最近更新 更多