MVC - HTML。ActionLink 下载文件 - 如何处理和报告失败

MVC - HTML.ActionLink to download file - How to handle and report failures

提问人:m_finn 提问时间:10/17/2023 最后编辑:freedomn-mm_finn 更新时间:10/17/2023 访问量:35

问:

我在 MVC 网页上有一个下载文件的按钮:

@Html.ActionLink("Connect", "DownloadFile", "Results", new { ResultID = Model.Result.ResultID }, new { @id = "connect-btn", @style = "display:none"})

控制器返回一个文件:

return File(stream, "text/plain", fullName + ".txt");

这工作正常,但控制器中的 DownloadFile 方法存在潜在问题,即返回的文件不正确,即为空。控制器已更改,因此在此事件中它返回 NULL,或者它可以返回新的 EmptyResult(?)

发生这种情况时,在视图中,我希望它停止/忽略下载空文件并显示页面消息“下载失败”。

我尝试在单击按钮时编写 javascript 函数(而不是使用 ActionLink),但是:

$.post 调用 - 会起作用,但我需要将 [ValidateJsonAntiForgeryToken] 添加到标题中,我知道这不能用 jquery 帖子完成(我已经尝试过了)

$.ajax 调用 - 在设计上不适用于下载的文件。

关于如何解决这个问题的任何建议?我只是需要它,以便在组装的文件被识别为不正确时,视图会显示一条消息,而不是给用户一个不正确的文件?

javascript jquery ajax asp.net-mvc

评论

0赞 freedomn-m 10/17/2023
更改您的链接以打开,然后从操作中抛出异常 - 异常将显示在新选项卡中 - 额外的奖励,在生成/下载文档时,新选项卡将有一个“进度”指示器。target="_new"
1赞 freedomn-m 10/17/2023
添加一个预验证步骤(例如使用ajax调用)来检查/验证文档,然后在通过时自动单击下载按钮(改进的用户体验)
1赞 freedomn-m 10/17/2023
但是我[原文如此]需要将[ValidateJsonAntiForgeryToken]添加到标题中 - 您如何使用刚刚创建的当前执行此操作@Html.ActionLink<a href='your_action'>Connect</a>
0赞 freedomn-m 10/17/2023
问题是导航到一个新页面(您的文档) - 因此您的页面立即失去控制。您无法离开页面,然后在失败时进行捕获。<a href=
1赞 freedomn-m 10/18/2023
打开页面,查看源代码。您提供的代码: 生成 HTML。它不会传递令牌并发出请求。如果您已将操作更改为,则 @Html.ActionLink 将不起作用。任何对 a 的单击都将离开当前页面 - 如果导航到的页面是下载页面,则浏览器将取消导航,下载文件并将您留在当前页面上。一旦你点击了 a,你就不能再控制 href 所指的页面/链接上会发生什么。@Html.ActionLink(<a href=GET[HttpPost]<a><a href>

答: 暂无答案