【发布时间】:2021-02-28 21:43:28
【问题描述】:
我正在使用 Asp.net 和 MVC 模式。
我有大量数据(由 ID 标识的日志),用户可以请求(其中一些)它们。该请求由 ElasticSearch 处理。因此,弹性响应是巨大集合的一个子集,它被加载到视图模型中,我不想将它存储在本地数据库中,因为它可能会很快占用太多空间(而且我只需要它给用户会议)。这样的请求可能需要很长时间才能返回(几分钟)。
通过使用 Ajax 的 PostMethod,用户可以将“一个类别”添加到日志中。这些类别存储在本地数据库中,但也显示在视图中。
我的视图模型如下所示:
//elastic data, not stored in database and comes from the elastic request
public IEnumerable<Log> Logs { get; set; }
//take the id of a Log and associate a category, comes from the local database
public IEnumerable<Category> Categories { get; set; }
还有我的观点(简化了,我还有很多其他字段要显示):
<table>
<tbody>
@{foreach (var l in Model.Logs)
{
<tr>
<td>@Html.DisplayFor(modelItem => l.Message)</td>
<td>@Html.DisplayFor(modelItem => Model.Category.First(e => e.ID == l.Id).CategoryName)</td>
</tr>
}
}
</tbody>
</table>
当用户添加“类别”时,它是通过发布请求完成的。我想显示在视图中加载但具有更新类别的日志。不幸的是,当我发出 post 请求时,我得到了一个新的 ViewModel,因此丢失了所有日志数据,我无法再次请求它们(因为这需要很长时间)。
这个post 提议使用JavaScript 来更新视图。但是我的日志数据真的很丰富,解析 dom 将是极其乏味和糟糕的表现。
我正在寻找一种更简洁的方法来实现我的目标,即使它需要对当前架构进行更改。 我想我需要缓存弹性响应,但我不知道应该如何干净地完成。
【问题讨论】:
标签: c# ajax asp.net-mvc post