gpt4 book ai didi

javascript - ASP.net MVC 5 从 Controller 调用 js 函数并已返回

转载 作者:行者123 更新时间:2023-12-03 03:26:01 25 4
gpt4 key购买 nike

我需要能够从我的 MVC 5 Controller 调用 JavaScript 函数。但是,我目前在 Controller 中使用返回,根据我收集的信息,您无法返回 2 件事...

我目前拥有的代码是这样的:

public async Task<FileResult> exportTempBom()
{
bool x = await checkExcelFile();
string originalDirectory = Path.Combine(new DirectoryInfo(string.Format("{0}App_Data\\", Server.MapPath(@"\"))).ToString(), "downloads");
byte[] fileBytes = System.IO.File.ReadAllBytes(originalDirectory + "\\BomTemp.xlsx");

return File(fileBytes, "application/vnd.ms-excel", "BomTemplate.xlsx");
}

....more code here....

<iframe name="_frameDownload" id="_frameDownload" src="" style="width: 0px; height: 0px; display: none;"></iframe>

正如您在上面的代码中看到的,我已经发回了用户请求下载的 Excel 文件。但是,我需要在将文件返回给用户之前或之后调用 JavaScript 函数。

我需要做的是在文件开始下载之后从 Controller 调用loadingTheOverlay(false);。调用此函数会将覆盖层从页面上移除,以便用户可以继续浏览该网站。

checkExcelFile() 是我检查他们即将下载的 Excel 文件的地方,以确保其是最新的。如果不是,那么它会在开始下载之前更新文件。这就是为什么我需要叠加层,以便用户知道为什么下载 Excel 文件需要比平常更长的时间。

我在 Razor 页面上使用此调用该 Controller :

 <ul class="dropdown-menu">
<li>@Html.ActionLink("Download BOM Template", "exportTempBom", "Templates")</li>
<li>@Html.ActionLink("Download Inventory Template", "exportTempInventory", "Templates", null, new {
onclick = "loadingTheOverlay(true);",
target = "_frameDownload"
})</li>
</ul>

是否有任何 MVC 代码可以完成原始 ASP.net 的功能?

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);

最佳答案

您可以在调用操作方法之前执行 JavaScript 方法。

您需要处理链接上的点击事件,防止默认行为,调用自定义 js 函数,然后调用其他操作方法。

@Html.ActionLink("Download BOM Template", "exportTempBom", "Templates",
null,new { id="downloadLink"})

上面的代码将渲染一个带有 id downloadLink 的 anchor 标记。

现在使用 javascript 来处理此特定链接的 click 事件

$(function(){

$("#downloadLink").click(function(e){
e.preventDefault();
myCustomMethod();
window.location.href=$(this).attr("href");
});

});

您不应该考虑从服务器操作方法返回 js 函数的 javascript 函数/字符串文字。这个模式太糟糕了!!!!

关于javascript - ASP.net MVC 5 从 Controller 调用 js 函数并已返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46322906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com