【问题标题】:Editing Partial Object in MVC without Actually Saving在 MVC 中编辑部分对象而不实际保存
【发布时间】:2017-05-06 00:00:29
【问题描述】:

我的标题可能很糟糕,因为我很难用措辞来表达我想要做的事情。

我有一个可能包含大量记录的对象,如下所示:

public class AssignmentGenerator : BaseGenerator
{
    public bool IsLibrary { get; set; } = false;
    public List<LineItem> LineItems { get; set; } = new List<LineItem>();
}

public class LineItem
{
    public string Name { get; set; }
    public string Value { get; set; }
}

我创建了一个允许编辑对象值的表单,但行项目列表可能会变得非常大(我的一个示例是 ~ 3000)。在这种情况下,我想让订单项列表在我的视图中成为一个分页列表,允许一次编辑 10 到 50 个项目。
我已经阅读了很多关于如何进行分页的教程和帖子,但我发现没有一篇涉及如何编辑大量数据。在用户实际单击“保存”按钮之前,我不想将每个页面上的更改保存到数据库中。有没有办法将值存储在对象中,根据需要检索它们,然后在用户操作时保存?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    简短的回答是肯定的,有一种方法——你是程序员,你可以做你想做的事。没有更多细节很难给出真实的代码示例,所以下面只是模糊的指导。

    您必须将它们的更改存储在某处,但您可以选择将它们保存在临时数据库中,或者将您的 AssignmentGenerator 保存在服务器的内存中,并在它们页面时更新集合(假设 1服务器或固定会话)。

    您必须在用户更改页面时发布对象的当前状态(而不仅仅是 Get 端点)。您不必保存到真实数据库;您只需更新您的临时副本。 Save 按钮应该触发一个不同的控制器动作,将你的临时副本移动到真实的数据存储中。

    【讨论】:

    • 我的经验是赢取表格和服务,所以如果这是基本的,我深表歉意。对此我的问题是,如何在控制器中维护对象状态?
    • 你没有——绝对不是在控制器本身我的意思是,那是共享的。一种选择是将其存储为会话数据-stackoverflow.com/questions/28154081,它可以是内存中的会话,或者如果解决方案需要可扩展,则更好地由分布式缓存支持。我建议先阅读更多关于会话的内容,以了解它们的工作原理。
    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多