【发布时间】:2015-03-25 02:09:27
【问题描述】:
我有一个视图,它使用 foreach 循环来显示带有删除选项的学生列表。但是 Html.hidden 没有按预期获得正确的 student.ID。
这是我的学生班级:
public class Student
{
public Guid ID { get; set; }
public string Name { get; set; }
}
我的控制器
public ActionResult Index()
{
var students = db.Students.OrderBy(s => s.ID).ToList();
return View(students);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DeleteStudent(Guid Id)
{
if (Id != null)
{
Student student = db.Students.Single(s => s.ID == Id);
if (student == null)
{
return View("Error");
}
db.Students.Remove(student);
db.SaveChanges();
return RedirectToAction("Index");
}
return View("Error");
}
我的观点
@model IEnumerable<MyProject.Models.Student>
@{ ViewBag.Title = "Student List"; }
<h2>@ViewBag.Title</h2>
<ul>
@foreach (var student in Model)
{
<li>
@Html.displayFor(modelItem => student.Name)
@using (Html.BeginForm("DeleteStudent", "MyController", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.Hidden("Id", student.ID)
<input type="submit" value="Delete" class="btnSubmit">
}
</li>
}
</ul>
假设有 3 个学生的 ID 分别为 1、2 和 3。但是当我尝试删除学生 3 时,在控制器上,参数Guid Id 的值为 1,因此 ID = 1 的学生被删除。
实际上,无论我删除哪个学生,Id 总是取列表中第一个学生的值。
我做错了什么,或者有什么更好的解决方法?
【问题讨论】:
-
您的模型使用
@model MyProject.Models.Students,而控制器通过Students.ToList()。我猜这是不匹配。试试@model MyProject.Models.Students[] -
感谢您指出这一点!我在我的问题中添加了
IEnumerable。它现在可以正常工作而无需更改为TrueBlueAussie's Answer。
标签: asp.net asp.net-mvc razor