编辑和重新加载后,有时会保留原始值

时间:2017-09-11 21:33:13

标签: asp.net-mvc caching web

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();
    }
}

0 个答案:

没有答案