.net core 2.0 Razor pages VS 2017表格数据下载
Posted
技术标签:
【中文标题】.net core 2.0 Razor pages VS 2017表格数据下载【英文标题】:.net core 2.0 Razor pages VS 2017 Tabular data download 【发布时间】:2018-08-16 11:22:46 【问题描述】:我是 Razor pages .net core VS 2017 的 Web 开发新手。
我有索引页面,它使用 EF 核心模型以行和列的形式列出我的数据。
我还通过 DropDowns 和搜索框提供数据过滤选项。
我想将此表格过滤/未过滤数据导出到 Excel。 --- 我认为我可以使用 NPOI nuget 包 (http://www.talkingdotnet.com/import-export-excel-asp-net-core-2-razor-pages/)。
我想使用带有按钮单击的 asp-page-handler 来执行此操作。
问题: 1. 这是 GET 请求还是 POST ?
-
如何将数据(例如具有所有数据的模型对象)传递给页面处理程序?
感谢任何帮助。
谢谢。
【问题讨论】:
【参考方案1】:关于使用 GET 或 POST 的第一个问题,这两种方法都可以使用,但我个人在这种情况下使用 POST 方法。
对于您的第二个问题,我不会将所有过滤后的数据发送到服务器,但我会传递过滤信息,这些信息将用于生成数据并将它们导出到 Excel 文件。
更新 1
我为你做了一个简单的例子。在您的 cshtml 文件中键入以下 html:
<form method="post">
<button type="submit" class="btn btn-info"> Export</button>
<input asp-for="Value1" type="hidden" value="1" />
<input asp-for="Value2" type="hidden" value="2" />
</form>
这两个输入将用于向服务器提交值,这些值将用于过滤您的数据。以下 OnPost 将返回一个静态文件,但您可以编写自己的代码,以便将过滤后的数据返回并返回给浏览器。
[BindProperty]
public int Value1 get; set;
[BindProperty]
public int Value2 get; set;
public ActionResult OnPost()
// example of returning a file
return File("~/Images/accounts.png", "image/png", "FileNameForBrowser.png");
【讨论】:
1.使用 POST 而不是 GET 的任何特殊原因???带有按钮标签我们可以使用 GET 吗?因为当我到达 OnPostExport() 时,我没有受到 OnGetExport() 的影响......此外,发布请求将要求我保持页面状态(对吗?)。任何示例如何将过滤参数(很多)传递给页面处理程序? ` 维护您的页面状态与下载操作无关,因为您可以将表单的目标属性设置为等于_blank,以便您下载文件。网页不会重新加载。您只想下载文件。 我尝试使用 target = _blank。它只是在另一个选项卡中打开同一页面,并出现错误“对象引用未设置为对象实例”---因为它试图重新加载页面但没有可用的数据。 如果您有上面评论中的表格,您将无法获取数据。您必须使用将用于将存储在这些输入中的值提交给服务器的输入。【参考方案2】:感谢@pitaridis 提供宝贵意见。
我最终这样做了:
` <a asp-page="./Index" asp-page-handler="Export"
asp-route-param1 = "@Model.data1"
asp-route-param2 = "@Model.data2"
asp-route-param3 = "@Model.data3"
class="btn btn-info">
Export
</a>
`
页面处理程序是OnGetExportAsync(...)
。在处理程序调用我正在刷新页面,不知道为什么我必须再次重新填充所有控件。对此有什么想法吗?
或其他选项可能是使用OnGetAsync()
方法并通过传递一个将其标识为文件下载的参数?
【讨论】:
以上是关于.net core 2.0 Razor pages VS 2017表格数据下载的主要内容,如果未能解决你的问题,请参考以下文章
.net core 2.0 Razor pages VS 2017表格数据下载
ASP.NET Core 2.0/Razor Pages - 如何在请求之间将数据保存在 NonFactors MVC6 网格中?
使用 ASP NET Core 2.0 Razor 页面进行路由
ASP.NET Core 2.0 Razor 页面使用 AddMvcCore() 而不是 AddMvc()