MVC5 删除按钮错误代码

本文关键字:错误代码 按钮 删除 MVC5 | 更新日期: 2023-09-27 18:37:26

我在MVC5工作。 我在 dbContext 中有一个正常运行的.mdf。 它在下表中生成数据。 删除按钮打印出来,但在按下时给出以下错误:

Index.cshtml

<center>
<table>
    <tr><td align="center">testID</td><td align="center">datetime</td><td align="center">col1</td><td align="center">col2</td><td align="center">col3</td><td></td></tr>
    @foreach (var item in Model.thistable)
    {
        <tr><td>@item.testID</td><td>@item.datetime</td><td>@item.col1</td><td>@item.col2</td><td>@item.col3</td><td><form action="@Url.Action("Delete", new{ testID = @item.testID})" method="delete"><input type="submit" value="Delete" /></form></td></tr>
    }
</table>
</center>

首页控制器.cs

public class HomeController : Controller
{
    private testContext db = new testContext();
    private UserViewModel uvm = new UserViewModel();
    public ActionResult Index()
    {
        try
        {
            List<Table1> thattable = db.Data1.ToList();
            uvm.thistable = thattable;
        }
        catch (Exception ex)
        {
            uvm.errorcode = ex.ToString();
        }
        return View(uvm);
    }
    public ActionResult Delete(int testID)
    {
        uvm.thistable.Remove(uvm.thistable.SingleOrDefault(o => o.testID == testID));
        db.SaveChanges(); 
        return View();
    }
public class Table1
{
    [Key]
    public int testID { get; set; }
    public string datetime { get; set; }
    public string col1 { get; set; }
    public string col2 { get; set; }
    public string col3 { get; set; }
}
public class UserViewModel
{
    public string errorcode { get; set; }
    public List<Table1> thistable { get; set; }
}
public class testContext : DbContext
{
    public DbSet<Table1> Data1 { get; set; }
}

}

错误代码:

The parameters dictionary contains a null entry for parameter 'testID' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Delete(Int32)' in 'MDFtoMVCdelete.Controllers.HomeController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters 

MVC5 删除按钮错误代码

您尝试删除的记录中没有记录

使用此代码

   public ActionResult Delete(int testID)
    {
        var toDel = uvm.thistable.Where(or => or.testId == testID).FirstOrDefault();
        if(toDel != null)
        {
          uvm.thistable.Remove(toDel);
          db.SaveChanges();
        }
        return View();
    }

我认为问题是"testID"没有传递到操作中。我相信 URL 上的查询字符串会被忽略,除非它是一个 GET,所以这可能是 testID 没有被传递的原因。它之所以抱怨,是因为您使用int作为 Action 参数,并且没有传递任何参数。尝试包含具有testID的输入,以便它在响应正文中包含testID而不是查询字符串。

@using(Html.BeginForm("Delete"))
{
    <input type="hidden" name="testID" value="@item.testID" />
    <input type="submit" value="Delete" />
}

这实际上将使用 POST 表单方法而不是 DELETE 表单方法,但除非有特定原因您想使用 DELETE 方法,否则 POST 应该没问题。

此外,您可能应该使用 [HttpPost] 属性修饰Delete ActionMethod,以便不能使用 GET 调用它。