无法从搜索页面删除记录

时间:2018-08-06 06:52:35

标签: c# sql-server asp.net-mvc

我的应用程序中有一个索引页。当我从索引页面删除记录时,它正在被删除。但是,当我从“搜索”页面删除任何记录(显示与索引页面相同的数据)时,无法删除该记录。它显示错误:

  

对于“ 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>

这两个页​​面都有相同的代码,但是为什么我在删除搜索页面的记录时出现错误?

2 个答案:

答案 0 :(得分:3)

您没有在搜索页面中提供ComplainIdComplainId在搜索页面中必须为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 })