MVC5删除按钮错误代码

时间:2015-01-13 18:11:46

标签: c# asp.net-mvc-5

我在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>

HomeController.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 

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用此代码

   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();
    }

答案 2 :(得分:0)

我认为问题是“testID”没有传递给Action。我相信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应该没问题。

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