您好我正在使用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
答案 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>