c# - 在不重新加载页面的情况下将数据加载到 MVC 视图中
问题描述
我正在构建一个带有 cshtml + Angular 前端的 MVC Web 应用程序。该应用程序的一个重要方面是视图在从自定义数据服务中检索到新数据时自动更新角度数据表。
数据服务通过后端 C# 类中的 API 调用进行访问,该类以设定的时间间隔(大约 5 分钟)将新数据作为 ViewModel List<> 获取,然后缓存。ViewModel List<> 然后作为 ActionResult 参数传递给视图return View(List<model>)
,在我们的 Angular 控制器中序列化并使用 ng-repeat 显示在表格中。
我对 MVC 比较陌生,现在我知道如何将数据从控制器获取到视图的唯一方法是将其直接作为 ActionResult 参数传递。因此,我将数据放入视图的唯一方法是通过显式操作(HTTPPOST、强制刷新、FormSubmit 等)重新加载整个页面。
我想尝试使用 Angular,也许还有 AJAX(?) 或类似的库,以“询问”进行 API 调用并缓存数据的控制器是否每 10 秒左右有新数据。然后,如果有新数据(大约 5 分钟一次),它将在后台将该数据加载到视图中,而无需重新加载页面,以便 Angular 可以对其进行序列化,然后仅重新加载表格。
这只是为了使用户无需执行显式操作或刷新页面即可获取最新数据。
我知道如何完成这一切,除了让 Angular 询问进行 API 调用的 C# 类是否进行了新的服务调用(并将其存储在 ViewModel 中),然后从该 ViewModel 中“提取”新数据无需返回 ActionResult 即可进入视图
编辑:
由于这是我们的大多数问题/困惑出现的地方,我们的数据服务并不位于我们的应用程序之外,据我所知,无法通过对内部 URL 的引用进行访问。它是我们必须通过 C# 函数调用的“连接服务包”,即
using ServicePackage;
MyDataService = new DataService();
ViewModel.DataList = MyDataService.getData();
这一切都发生在控制器类中。我知道这是 hackey,而不是现代 Web 应用程序架构是如何完成的,但它是客户可以给我们使用的最好的。相信我,如果我们有一个可以查询的数据服务器或 Web-API,我们将使用 $http 或 Ajax 或视图可以从外部源提取数据的十几种其他方式中的任何一种。
解决方案
推荐阅读
- curl - Freeswitch dialplan cURL - 如何设置超时
- php - 带有新 PHP 驱动程序的 MongoDB 4.2 中的事务
- javascript - 如何使用 ctrl + 单击选择多个单元格
- azure - Azure 搜索索引存储大小停止在 8MB
- javascript - Django:日期格式管理和 unique_together ->“20/03/2020”值的日期格式无效。它必须是 YYYY-MM-DD 格式。”]
- flutter - 文本小部件显示在重新加载中但不在热重新加载中
- amazon-web-services - 我想创建一个只能由使用 Cognito 创建的用户在登录时访问的 S3 存储桶
- azure - Set-AzureRmDiagnosticSetting:找不到与参数名称“名称”匹配的参数
- java - Hibernate lucene 只搜索 60 条第一条记录
- php - 如何使用搜索和替换通过 API 修改 Google Docs 文档?