【问题标题】:How to delete rows from table when clicking button单击按钮时如何从表中删除行
【发布时间】:2021-01-26 23:52:18
【问题描述】:

我想知道如何从数据库中的 Alerts 表中删除所有行。我将 ASP.NET Core 与 Entity Framework 结合使用。当我现在单击删除按钮时,我会收到错误 404(未找到)

任何帮助将不胜感激!

控制器

private readonly FrontlineDbContext _dbContext;

public class AlertsController : Controller{

public AlertsController( FrontlineDbContext dbContext)
{
    
    _dbContext = dbContext;
} 

[HttpPost]
[Authorize(Roles = "Admin")]
public void Delete()
{
    var alertsList = _dbContext.Alerts.ToList();
    _dbContext.Alerts.RemoveRange(alertsList);

    _dbContext.SaveChanges();

    //displays a success message after updating, as stated in the Shared>_Layout
    TempData["message"] = $"Alerts have been deleted";
}
}

警报视图

<h1>Alerts Overview</h1>

<a asp-action="Delete"> Delete Alerts</a>

【问题讨论】:

  • 我认为您需要添加 asp-controller 属性。(asp-controller="Alerts") 如果锚呈现任何内容,它可能指向“/Delete”而不是“/Alerts/Delete”结果为 405。
  • 添加 asp-controller="alerts" 并没有什么不同。它指向 /Alerts/Delete 但它仍然给出 405 错误
  • 我相信你需要用 [HttpDelete] 来装饰你的方法。 405 is not Not Found,是Method Not Allowed,表示功能配置不正确。

标签: c# entity-framework asp.net-core


【解决方案1】:

您的视图代码正在生成一个未到达Delete 操作方法的GET 请求,因为它被标记为[HttpPost] 属性。

要生成一个 POST 请求,并访问您的 Delete 方法,请将您的视图代码修改为 -

<form asp-action="Delete">
    <input type="submit" value="Delete" class="btn btn-link"/>
</form>

另外,将操作方法​​上的[HttpPost] 替换为[HttpPost, ActionName("Delete")],以确保这一点。

【讨论】:

    【解决方案2】:

    405 错误 - Method Not Allowed 错误。我认为那是因为

     [Authorize(Roles = "Admin")]
    

    删除此属性进行测试,看看它是否有效。

    由于ancor标签通常产生GET请求,最好也去掉[httpPost]属性。

    同样把你的代码改成这个,你没有把 Controller 作为你的基类

    ....
    
    [Route("[Controller]/[Action]")]
    public AlertsController( FrontlineDbContext dbContext):Controller
    {
        
        _dbContext = dbContext;
    } 
    
    
    [Authorize(Roles = "Admin")]
    public IActionResult Delete()
    {
        var alertsList = _dbContext.Alerts.ToList();
          if (alertsList == null) return Ok();
        _dbContext.Alerts.RemoveRange(alertsList);
       var result=_dbContext.SaveChanges();
       if(result >0)
       {
        //displays a success message after updating, as stated in the Shared>_Layout
        TempData["message"] = $"Alerts have been deleted";
         return Ok();
         }
     return BadRequest("Items not deleted");
    }
    

    并更改您的视图代码:

    
    <a asp-controller="Alerts" asp-action="Delete"> Delete</a>
    
    

    【讨论】:

    • 这仍然返回 405 错误。我忘了把我的 public class AlertsController : Controller 。我已经编辑了我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多