2009-09-16 45 views
5

我有一個用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> 

我想我將不得不改變周圍的文件處理代碼,一旦此去住,但現在這已經足夠了。建議也歡迎:)

謝謝!

回答

12

使用Url.Content,例如:

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

代字號意思是「我的地盤,只要出現這種情況是根。」您不必將文件放入內容中;你可以把它們放在你的站點根目錄下的任何位置。

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

+1正是我想要的(對於MVC3 - 鏈接到elmah.axd),謝謝! – ashes999 2011-12-28 21:42:11

7

是適當的相當於BaseDirectory在ASP.NET應用程序是HttpRuntime.AppDomainAppPath。但是,您也可能會發現Server.MapPath方法很有用。你通過HttpContext.Current.Server進入服務器方法。

話雖如此,你確定你想在你的視圖中的這種類型的代碼。在我看來,你想要顯示的值列表應該由控制器生成。