MVC5网络应用。我有一个基本的编辑方法:
public ActionResult Edit(int StudentId)
{
StudentModel model = repo.GetStudent(StudentId);
return PartialView("_EditLot", model);
}
并保存帖子:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(StudentModel model)
{
repo.UpdateStudent(model);
return RedirectToAction("Index", "Subject", new { SubjectId = model.StudentId });
}
所以我发布了编辑,将数据保存在repo中,然后将其引导回Index方法,以便重新加载(索引包含该主题的学生列表,每个学生的表格中都有编辑链接)。
public ActionResult Index(int ClassId)
{
ClassViewModel model = new ClassDataViewModel()
{
StudentList = repo.GetStudents(ClassId)
};
return View(model);
}
编辑:索引视图有一个学生数据表:
@model MyApp.Models.SubjectViewModel
<table class="table table-responsive processor-data-table">
<thead>
<tr>
<th>
First Name
</th>
<th>
Last Name
</th>
<th>
DOB
</th>
<th>
Grade
</th>
<th>Edit</th>
</tr>
</thead>
<tbody>
for (var i = 0; i < Model.StudentList.Count(); i++)
{
<tr>
<td>
@Html.DisplayFor(modelItem => Model.StudentList[i].FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => Model.StudentList[i].LastName)
</td>
<td>
@Html.DisplayFor(modelItem => Model.StudentList[i].DOB)
</td>
<td>
@Html.DisplayFor(modelItem => Model.StudentList[i].Grade)
</td>
<a href="@Url.Action("Edit", "Student", new { @StudentId = Model.StudentList[i].StudentID })" class="btn btn-info modal-link"><span class="glyphicon glyphicon-pencil"></span></a>
</td>
</tr>
}
</tbody>
</table>
我经常发现在使用chrome和IE 10或更高版本进行测试时,保存和重新加载后原始值仍然显示。例如,我为学生更改了DOB,有时原始DOB在重新加载后仍保留在索引表中。
我一直按Enter键提交表单,我怀疑Enter键是触发取消按钮但是取消按钮的类型为“按钮”,所以我认为不可能。
然后我将其添加到Edit方法(而不是帖子)并修复了chrome中的问题:
[OutputCache(Location = System.Web.UI.OutputCacheLocation.None, NoStore = true)]
...但我仍然在IE中的索引视图中获得间歇性的旧值,在10次测试中,3次我将在索引列表中使用旧值。
编辑:有人要求查看回购更新方法:
public void UpdateStudent(StudentModel model)
{
using (var db = new SchoolEntities())
{
Student student = new Student()
{
StudentID = model.StudentID,
FirstName = model.FirstName,
LastName = model.LastName,
Grade = model.Grade,
DOB = model.DOB
};
db.Entry(student).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
}
}