首页 > 解决方案 > 使用 MVC javascript razor 从数据库下载文件

问题描述

我显示可以在表格中下载的文件列表(在数据库中)。

<table style="border: none; width:100%">                
    @for (int i = 0; i <= Model.docs.Count() - 1; i++)
    {
        <tr onclick="downloadFile('@Model.docs[i].id.ToString()')" class="rowFile" data-row=@i id=@("rigaDoc" + i)>
            <td style="border-bottom:1px solid black; width:30px;">
                <img src="@Url.Content(Model.docs[i].icon)" alt="Image" />
            </td>      
            <td style="border-bottom:1px solid black; padding-left: 20px; width:auto;">
                @Html.Label(Model.docs[i].nameFile.ToString().Split('.')[0], new { @class = "" })
            </td>
        </tr>
    }          
</table>

一旦用户单击该表的一行,我需要将该行的 GUID 发送到控制器并开始文件下载。

function downloadFile(fileId) {
    var urlDownload = '@Url.Action("Download", "GestioneDocumenti", new { id = fileId })';
}

但是,我不能使用 fileId 因为调试器说:

“名称 fileId 未在此上下文中使用”。

如何将信息发送到控制器方法?

标签: javascriptfilerazormodel-view-controllerdownload

解决方案


Razor 是服务器端代码,在发送到视图之前在服务器上进行解析。将您的功能更改为

function downloadFile(fileId) {
    var urlDownload = '@Url.Action("Download", "GestioneDocumenti")' + '/' + fileId;
}

更好的解决方案是将 url 作为data-属性生成

<tr data-url="@Url.Action("Download", "GestioneDocumenti", new { id = Model.docs[i].id })" class="rowFile">

并将脚本更改为

$('.rowFile').click(function() {
    var urlDownload = $(this).data('url');
});

推荐阅读