C# 如何避免在MVC架构中使用post方法后再次获取模型数据?

C# 如何避免在MVC架构中使用post方法后再次获取模型数据?,c#,ajax,asp.net-mvc,post,C#,Ajax,Asp.net Mvc,Post,我正在使用Asp.net和MVC模式 我收集了大量数据(通过ID标识的日志),用户可以请求(部分)这些数据。请求由ElasticSearch处理。因此,弹性响应是庞大集合的一个子集,它被加载到viewmodel中,我不想将其存储在本地DB中,因为它可能会很快占用太多空间(而且我只需要在用户会话中使用它)。这样的请求可能需要很多时间才能返回(几分钟) 通过使用Ajax的PostMethod,用户可以向日志中添加“类别”。这些类别存储在本地数据库中,但也显示在视图中 我的视图模型如下所示: //弹性

我正在使用Asp.net和MVC模式

我收集了大量数据(通过ID标识的日志),用户可以请求(部分)这些数据。请求由ElasticSearch处理。因此,弹性响应是庞大集合的一个子集,它被加载到viewmodel中,我不想将其存储在本地DB中,因为它可能会很快占用太多空间(而且我只需要在用户会话中使用它)。这样的请求可能需要很多时间才能返回(几分钟)

通过使用Ajax的PostMethod,用户可以向日志中添加“类别”。这些类别存储在本地数据库中,但也显示在视图中

我的视图模型如下所示:

//弹性数据,不存储在数据库中,来自弹性请求
公共IEnumerable日志{get;set;}
//获取日志id并关联来自本地数据库的类别
公共IEnumerable类别{get;set;}
和我的视图(简化后,我有许多其他字段要显示):


@{foreach(Model.Logs中的var l)
{
@DisplayFor(modelItem=>l.Message)
@DisplayFor(modelItem=>Model.Category.First(e=>e.ID==l.ID).CategoryName)
}
}
当用户添加“类别”时,它是通过post请求完成的。我想显示在视图中加载的日志,但包含更新的类别。不幸的是,当我执行post请求时,我得到了一个新的ViewModel,因此丢失了所有日志数据,我无法再次请求它们(因为这需要花费太多时间)

这建议使用JavaScript来更新视图。但是我的日志数据非常丰富,解析dom将是非常繁琐和糟糕的

我正在寻找一种更干净的方法来实现我的目标,即使它需要改变当前的体系结构。
我认为我需要缓存弹性响应,但我不知道应该如何干净地进行缓存。

我建议优化您的返回数据。获取数据子集的调用需要几分钟,这一事实花费的时间太长,导致您避免进行后续调用。根据我的经验,Elasticsearch非常快。如果需要这么长时间,那么您可能返回了太多的数据。这也是为什么当您尝试将其存储在localDB中时会占用大量存储空间的原因


查看返回给消费者的数据。尝试过滤数据,以满足消费者的需求。在这里实现分页可能会有所帮助。

一个选项是使用客户端框架,如Angular、React或Blazor client。

数据子集已根据用户输入进行过滤,我的应用程序规范必须能够检索到如此数量的数据。我可能需要补充一点,我的弹性搜索查询是对Kibana进行的,它不是本地托管的。例如,在调试中,我只需要100个日志(当我需要6000个日志时),大约需要1分钟。但我将考虑实现分页。