0

我遇到了缓存问题,并尝试了所有我能找到的解决方案!

我有一个简单的创建屏幕,其中一行插入到表中(尽管在编辑现有行时我也遇到了同样的问题)。

创建行后,用户将返回到上一个屏幕,该屏幕仍显示旧数据。(与编辑相同的问题)

刷新页面没有区别。不同的浏览器有同样的问题。数据已成功添加到数据库中。只有通过重新启动应用程序,它才会刷新屏幕上的数据。

我尝试过的事情:

1:

DataContext.Refresh(RefreshMode.OverwriteCurrentValues)

2:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

3:

ModelState.Clear()

这些都没有任何区别。我以前在编辑或创建时没有遇到过这个问题,所以我一定遗漏了一些东西。非常感谢任何帮助!

以下是控制器的相关部分:

ISISDataContext db = new ISISDataContext(StudentISIS.Properties.Settings.Default.ISISConn.ToString());

    public ActionResult Index()
    {
        var student = (ISIS2Models.Student)Session["CurrentUser"];

        return View(student);
    }

    public ActionResult STGCreate(int id)
    {
        var enrolment = db.Enrolments.Single(e => e.EnrolmentID == id);
        return View(enrolment);
    }


    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult STGCreate([Bind(Exclude = "Id")] StudentGrade STGToCreate, FormCollection collection)
    {
        var STG = new StudentGrade();

        STG.Grade = collection["StudentTG"];
        STG.EnrolmentID = int.Parse(collection["Enrolment"]);
        STG.DateChanged = DateTime.Now;

        db.StudentGrades.InsertOnSubmit(STG);
        db.SubmitChanges();

        return RedirectToAction("Index");
    }

编辑:

以下是索引视图中的代码,它遍历注册以显示成绩:

<%foreach (var en in Model.Enrolments) {%>
//Some table stuff
<td>
<%try
        { %>
      <%= Html.ActionLink(en.StudentGrades.Grade,"STGEdit",new {controller = "Progress", id = en.StudentGrades.StudentGradeID})%>
      <%}
        catch (NullReferenceException) {%><%= Html.ActionLink("Set","STGCreate",new {controller = "Progress", id = en.EnrolmentID})%><% } %>
      </td>
//Some more table stuff

<%}%
4

1 回答 1

1

行从何而来?是你的 ISIS2Models.Student 课吗?我只能假设这是因为您的Index方法中的代码太少了。

如果是,并且您将其存储在会话中,那么您不会更新该值,因此当您从内部检索它时,Index它仍将具有相同的旧值。

您需要做的是每次调用Index. 像这样的一些方法:

public ActionResult Index()
{
    var currentUser = (ISIS2Models.Student)Session["CurrentUser"];

    var student = GetStudentById(currentUser.ID);//this will get the up-to-date student record from the DB

    return View(student);
}
于 2013-04-10T10:48:02.437 回答