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
您尝试删除的记录中没有记录
使用此代码
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 调用它。