映射本地文件ASP.NET / MVC的路径

时间:2009-09-16 20:45:39

标签: asp.net-mvc

我有一个用ASP.NET MVC编写的文件上传程序。它目前在我的本地开发机器上,我想知道如何(如果可能的话)为每个上传的文件生成一个链接,以便在单击它时显示/下载该项目等。

处理显示文件列表的当前代码/标记:

<table>
    <tr>
        <th></th>
        <th>
            Name
        </th>
        <th>
            Length
        </th>
        <th></th>
    </tr>
    <%
    var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "uploads");
    foreach (var file in Directory.GetFiles(path))
    {
        var item = new FileInfo(file);
    %>
    <tr>
        <td></td>
        <td>
            <%=Html.Encode(Path.GetFileName(item.Name))%>
        </td>
        <td>
            <%=Html.Encode(item.Length >= 1024 ? item.Length / 1024 + " kilobytes" : item.Length + " bytes")%>
        </td>
        <td>
            // This is the line in question. Does not work as-is.
            <a href="<%= item.FullName %>"><%= Html.Encode(Path.GetFileName(item.Name)) %></a>
        </td>
    </tr>
    <% } %>
</table>

我想我一旦生效就必须更改文件处理代码,但是现在这已经足够了。建议也欢迎:)

谢谢!

3 个答案:

答案 0 :(得分:12)

使用Url.Content,例如:

<img src="<%= Url.Content("~/Content/UserImages/FileName.jpg") %>" />

代字号意味着“我网站的根源,无论发生在哪里。”您不必将文件放在内容中;您可以将它们放在站点根目录下的任何位置。

答案 1 :(得分:7)

是的,ASP.NET应用程序中BaseDirectory的相应等效项是HttpRuntime.AppDomainAppPath。但是,您可能还会发现Server.MapPath方法很有用。您可以通过HttpContext.Current.Server获取服务器方法。

话虽如此,您确定要在视图中使用此类代码。在我看来,您想要显示的值列表应该由控制器生成。

答案 2 :(得分:1)

<a href="<%= Url.Content(System.Web.VirtualPathUtility.ToAppRelative("~/" + file.Substring(AppDomain.CurrentDomain.BaseDirectory.Length))) %></a>