删除操作返回 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
采用实体的主键(通常是 long
或 Guid
)。如果没有找到具有此主键的实体,则它 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 删除视图,但实际上您想要重新路由到索引视图。
我有用户电子邮件列表,但我尝试创建删除方法,但我不明白为什么它只返回 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
采用实体的主键(通常是 long
或 Guid
)。如果没有找到具有此主键的实体,则它 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 删除视图,但实际上您想要重新路由到索引视图。