使用razor动态打开表格中的文件

时间:2013-05-16 08:27:21

标签: asp.net asp.net-mvc-3 razor

您好我正在使用razor来显示包含一些不同详细信息的文件列表的Table。我只想在点击他的名字时显示一个文件。

以下是我的观点:

<table>
<tr>
    <th>
        Nom
    </th>
    <th>
        Date
    </th>
    <th>
        Uploader
    </th>
    <th></th>
</tr>

@foreach (var item in Model) {
<tr>
    <td>
          <a href = @Url.Action("ViewAttachment", new { fileName = item.Path }) > @Html.DisplayFor(modelItem => item.Nom) </a>  


    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Date)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Uploader)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.DocumentID }) |
        @Html.ActionLink("Details", "Details", new { id=item.DocumentID }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.DocumentID })
    </td>
</tr>
}

</table>

在我的动作中,我将文件的路径发送给控制器。但我不知道如何处理它。

public ActionResult ViewAttachment(string fileName)
    {
        try
        {
            return Redirect(filename);
        }
        catch
        {
            throw new HttpException(404, "Couldn't find " + fileName);
        }


    } 

当我点击它时会将我重定向到domain/Document/Content/myfile,但我的文件位于domain/Content/myfile

1 个答案:

答案 0 :(得分:2)

  

点击他的名字后如何打开文件?

如果文件位于服务器上可由客户端直接访问的位置,则不需要控制器操作,您可以直接指向此位置的链接:

<a href="@Url.Content("~/content/" + System.IO.Path.GetFileName(item.Path))"> 
    @Html.DisplayFor(modelItem => item.Nom) 
</a>  

如果无法从客户端访问该文件,则需要控制器操作通过返回文件结果来提供此文件:

public ActionResult ViewAttachment(string fileName)
{
    fileName = System.IO.Path.GetFileName(fileName);
    string file = Server.MapPath("~/Content/" + fileName);
    if (!File.Exists(file))
    {
        return HttpNotFound();
    }  
    return File(file, fileName, "application/octet-stream");
}

如果您想在新标签页中打开目标文件,可以将target="_blank"属性添加到锚点:

<a href="@Url.Content("~/content/" + System.IO.Path.GetFileName(item.Path))" target="_blank"> 
    @Html.DisplayFor(modelItem => item.Nom) 
</a>