如何在ASP.NET Web窗体中实现非平凡的编辑

时间:2012-10-25 14:06:24

标签: asp.net mvp

让我们说我们有这些课程:

class Teacher {
    public int Id { get; set; }
    public string FullName { get; set; }
    public List<Course> Courses { get; set; }
}

class Course {
    public int Id { get; set; }
    public string CourseName { get; set; }
}

现在假设我从教师列表中选择了一个教师实例,并且我已被重定向到一个页面,我可以编辑该教师可以教授的课程。因此,有一个她可以在momemt(从数据库中获取)教授的所有课程列表,其中包含“删除”选项和用户可以选择的所有可用课程的下拉列表;当用户从下拉列表中选择一个课程时,它会被添加到“她可以教”列表中。最后是一个“保存”按钮。

但是,当用户从列表中删除课程或添加课程时,我不想将其保存到数据库,直到按下“保存”按钮。我的问题是:在编辑之前和保存到数据库之前将Teacher对象及其子课程对象放在哪里?

到目前为止,我一直在使用Session来保存已编辑的对象;添加新课程只是将一个子对象添加到其集合中,删除课程会从Session中删除子对象。这是最好的方式还是有更好的东西(或至少更清洁)?

1 个答案:

答案 0 :(得分:1)

会话应该没问题,只要你把所有这些保留在内存中就可以了,如果会话过早丢失,可能会丢失它。

但是如果你正在寻找持久性,我可能会建议一个“待定”的数据库表,在这里你可以保留待处理的事务(添加和删除),直到它们准备好被保存。当您在此屏幕上时,您将实际数据与待处理数据组合在一起,当您保存时,您将挂起的更改应用于实际数据并终止挂起的更改。

如果他们取消了,您所要做的就是删除待处理的记录。