Delete Action返回HttpNotFound MVC的问题

时间:2017-12-07 13:35:59

标签: c# asp.net-mvc asp.net-mvc-4

我有用户电子邮件列表,而不是我尝试制作删除方法,但我不明白为什么它只是返回HttpNotFound,我错过了什么!任何人都可以指引我朝正确的方向? THX

控制器:

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>

班级:

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

    } }
}

2 个答案:

答案 0 :(得分:0)

DbSet.Find获取实体的主键(通常为longGuid)。如果找不到具有此主键的实体,则返回null。

如果用户电子邮件不是数据库中的主键,请使用SingleOrDefault查找用户。如果多条记录与给定条件匹配,SingleOrDefault将抛出异常(我们希望这样,因为电子邮件用于唯一标识用户)。如果未找到匹配的记录,则返回null。

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

答案 1 :(得分:0)

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

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(字符串用户)方法中,您尝试返回“删除”视图,但实际上您想要重新路由到“索引”视图。