我有用户电子邮件列表,而不是我尝试制作删除方法,但我不明白为什么它只是返回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 = "";
} }
}
答案 0 :(得分:0)
DbSet.Find
获取实体的主键(通常为long
或Guid
)。如果找不到具有此主键的实体,则返回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(字符串用户)方法中,您尝试返回“删除”视图,但实际上您想要重新路由到“索引”视图。