我在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
答案 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调用它。