c# - 有哪些选项可以不为 ASP .NET Core Razor 页面上的文件浏览器重新加载整个页面?
问题描述
我有一个用 ASP .NET Core 3.1 编写的应用程序,它使用 Razor 页面来显示各种内容。
我有一种项目详细信息视图,其中显示项目的详细信息,如图像、描述、一些字段以及项目的文件列表。
我使用 Graph API(使用存储在配置/Azure Key Vault 中的凭据)收集的项目文件,目前我将它们列在一个平面列表中。我将文件列表存储在我的模型中(在带有自定义对象的列表中,以包含文件的元数据)
我想显示带有文件夹的文件,因此用户在打开页面时只能看到顶级文件夹和文件。当他点击一个文件夹时,该文件夹应该“打开”并且用户现在应该看到这个文件夹的内容(可以选择再次向上导航一个级别)。
老实说,我不太确定如何开始。当用户单击文件夹时,我不想重新加载整个页面,据我所知,在 ASP .Net Core 中没有像更新面板这样的东西,它只能让我更新页面的一部分。
我还编写了一些其他 Reat.JS 应用程序,我知道我可以创建一个非常动态的反应应用程序来显示这些文件,但我不确定是否有一种好方法可以将这样的反应组件集成到我的 ASP .NET Core 应用程序中我不知道如何将凭据传递给该组件。
希望有人能指出我正确的方向并给我一些提示。
解决方案
是的,ASP.NET 核心 MVC 中没有更新面板,但这并不意味着您不能更新页面的各个部分。您可以使用视图组件来仅呈现文件夹的内容。以下是实现它所需要做的关键事情的列表:
- 将 MVC 操作添加到返回视图组件的控制器。
- 将文件夹内容包含
div
在已知的容器中id
。 - 将 JavaScript 事件侦听器附加到子文件夹
- 当用户单击一个子文件夹时,事件侦听器使用 fetch API 来调用 MVC 操作。
- 事件侦听器
innerHtml
将容器的属性设置div
为 MVC 操作返回的 HTML - 将事件侦听器附加到最近加载的内容的子文件夹。
这种方法不需要任何 JavaScript 框架或库。它可以用普通的 JavaScript 来实现。
可能你会想要添加 fetch 和 promise polyfills。
推荐阅读
- node.js - SyntaxError:意外的令牌
- amazon-web-services - AWS RDS VPC 安全性
- c++ - 如何对同一数组索引下的结构成员进行排序?
- php - Yii2分页只有上一个和下一个按钮隐藏页码
- laravel - Laravel 和 Google 应用引擎 flex 环境。在 nginx 配置中设置缓存控制不起作用
- swift - Swift 以编程方式设置 textview 字体仅适用于键入的新文本而不是所有文本
- angular - 单元测试:如何使用 Angular + Jasmine 模拟窗口对象的 innerWidth 属性?
- java - “未解决的要求:Import-Package: javax.ws.rs”在 Tomcat 上为 Liferay 部署 OSGi 模块时
- csv - 将 CSV 数据 (Windows-1252) 导出到 hive 时出现不可打印字符的问题
- excel - Open file, select sheet and copy it to file with macro