【问题标题】:How can I avoid fetching model data again after a post method in an MVC architecture?如何避免在 MVC 架构中的 post 方法之后再次获取模型数据?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 数据子集已经根据用户输入进行过滤,我的应用程序规范必须能够检索到这样数量的数据。我可能需要补充一点,我的弹性搜索查询是针对 Kibana 进行的,它不是本地托管的。例如在调试中我只要求 100 条日志(当我应该要求 6000 时),大约需要 1 分钟。但我会考虑实现分页。
    【解决方案2】:

    一种选择是使用客户端框架,例如 Angular、React 或 Blazor Client。 https://docs.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/choose-between-traditional-web-and-single-page-apps

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多