删除操作返回 HttpNotFound MVC 的问题

Issue with Delete Action returning HttpNotFound MVC

我有用户电子邮件列表,但我尝试创建删除方法,但我不明白为什么它只返回 HttpNotFound,我是不是漏掉了什么!谁能指导我正确的方向?谢谢

控制器:

public ActionResult Delete(string User) 
{

    var db = new DataContext();
    var u = db.PX.Find(User);
    if (u==null)
    {
        return HttpNotFound();
    }
    return View(u);

}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(string User)
{
    var db = new DataContext();
    var u = db.PX.Find(User);
    db.PX.Remove(u);
    db.SaveChanges();
    return RedirectToAction("Index");
}

查看 - 索引:

<table>
    <thead>
        <tr>
            <th>Email</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var user in Model)
        {
            <tr>
                <td>

                     <a href="/User/Delete?User=@user.Email">delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

Class :

public class user
{
    public string Email { get; set; }
    private string password = "";

    } }
}

DbSet.Find 采用实体的主键(通常是 longGuid)。如果没有找到具有此主键的实体,则它 returns 为空。

如果用户电子邮件不是数据库中的主键,请改为使用 SingleOrDefault 查找用户。 SingleOrDefault 如果有多个记录符合给定条件,将抛出异常(我们希望如此,因为电子邮件用于唯一标识用户)。如果没有找到匹配的记录,它 returns null.

var u = db.PX.SingleOrDefault(u => u.Email == User);

考虑将您的控制器更新为以下内容,这会简化对 PX 的查询 table 并确保您获取适当的值:

public ActionResult Delete(string User) 
{

    var db = new DataContext();
    var u = db.PX.Where(x=> x.Email == User).FirstOrDefault();  //This line updated
    db.PX.Remove(u);
    db.SaveChanges();
    return RedirectToAction("Index");

}

编辑以反映评论

在您的 Delete(string User) 方法中,您试图 return 删除视图,但实际上您想要重新路由到索引视图。