我的应用程序中有一个索引页。当我从索引页面删除记录时,它正在被删除。但是,当我从“搜索”页面删除任何记录(显示与索引页面相同的数据)时,无法删除该记录。它显示错误:
对于“ JNN.Controllers.HomeController”中的方法“ System.Web.Mvc.ActionResult Delete(Int32)”,参数字典包含一个非空类型“ System.Int32”的参数“ id”的空条目。可选参数必须是引用类型,可为空的类型,或者必须声明为可选参数。 参数名称:参数
这是我的控制器,它在索引页面上运行良好:
public ActionResult Delete(int id)
{
ComplainTable et = oe.ComplainTables.Find(id);
oe.ComplainTables.Remove(et);
oe.SaveChanges();
return RedirectToAction("Index");
}
这是ActionLink搜索页面:
<td>
@Html.ActionLink("Update", "Update", new { id = item.ComplainId }) |
@Html.ActionLink("Delete", "Delete", new { id = item.ComplainId })
</td>
这是索引页的ActionLink:
<td>
@Html.ActionLink("Update", "Update", new { id = item.ComplainId }) |
@Html.ActionLink("Delete", "Delete", new { id = item.ComplainId })
</td>
这两个页面都有相同的代码,但是为什么我在删除搜索页面的记录时出现错误?
答案 0 :(得分:3)
您没有在搜索页面中提供ComplainId
。 ComplainId
在搜索页面中必须为null
。请使用Chrome开发者工具(F12)检查搜索页面中上述链接的ID。
答案 1 :(得分:3)
从搜索页面中的item.ComplaintID
传递时,ActionLink
似乎为空。您应使用可为空的参数,例如:
public ActionResult Delete(int? id)
{
if (id == null)
{
// return view
}
ComplainTable et = oe.ComplainTables.Find(id);
oe.ComplainTables.Remove(et);
oe.SaveChanges();
return RedirectToAction("Index");
}
或使用ActionLink
中的空伙伴运算符设置默认值:
控制器
public ActionResult Delete(int id)
{
if (id == 0)
{
// return view
}
ComplainTable et = oe.ComplainTables.Find(id);
oe.ComplainTables.Remove(et);
oe.SaveChanges();
return RedirectToAction("Index");
}
查看
@Html.ActionLink("Delete", "Delete", new { id = item.ComplainId ?? 0 })