我有一个简单的 Razor 页面,我正在尝试显示一个按钮,单击该按钮时将在后面的页面模型代码中执行一个方法,类似于 C# 的 WPF 按钮。我根本不想使用任何 javascript。
我已经到了一点,它有点做我想做的事,但在页面加载时,它为每个列表中的每个元素执行方法。这是我不想要的,我只想在按下按钮时执行该方法。
带有for循环的razor页面代码如下:
@foreach (var item in @Model.UserData)
{
<tr>
<td>@item.Owner</td>
<td>@item.InputPath</td>
<td>@item.OutputPath</td>
<td>@item.Status</td>
<td>
<form asp-action="@Model.DownloadCsv(@item.OutputPath)" method="post">
<button>Download</button>
</form>
</td>
</tr>
<tr>
<td colspan="5"> <hr /> </td>
</tr>
}
在后面的代码中,我现在只有这个:
public IActionResult DownloadCsv(string inputPath)
{
int i = 0;
return Page();
}
您可以使用asp-page-handler
选择处理程序并asp-route-{attribute}
传递参数。并用于return File()
下载文件而无需刷新页面。
页:
@page
...
<td>
<form method="post">
<button type="submit" asp-page-handler="DownloadCsv" asp-route-inputPath="@item.OutputPath"
class="btn btn-success">
Download
</button>
</form>
</td>
页面模型:
public ActionResult OnPostDownloadCsvAsync(string inputPath)
{
//other logic
return File("path\to\file", "application/octet-stream",
"DownloadFileName.csv");
}
参考
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句