2009-09-16 27 views
5

Tôi có một chương trình tải lên tệp được viết bằng ASP.NET MVC. Nó hiện đang trên máy phát triển cục bộ của tôi và tôi muốn biết cách tạo (nếu có thể) để tạo liên kết cho mỗi tệp được tải lên, khi nó được nhấp, mục được hiển thị/tải xuống, v.v.Đường dẫn bản đồ của tệp cục bộ ASP.NET/MVC

Mã hiện tại/markup xử lý việc hiển thị danh sách tập tin:

<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> 

Tôi tưởng tượng tôi sẽ phải thay đổi mã xử lý tập tin trong khoảng thời gian này, nhưng bây giờ điều này là đủ. Đề xuất cũng được hoan nghênh :)

Cảm ơn!

Trả lời

12

Sử dụng Url.Content, ví dụ .:

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

Các phương tiện dấu ngã "thư mục gốc của trang web của tôi, bất cứ nơi nào điều đó xảy ra được." Bạn không phải đặt các tệp của mình trong Nội dung; bạn có thể đặt chúng bất cứ nơi nào bạn muốn dưới gốc trang web của bạn.

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

+1 chỉ là những gì tôi muốn (cho MVC3 - liên kết với elmah.axd), cảm ơn! – ashes999

7

Có tương đương thích hợp để BaseDirectory trong một ứng dụng ASP.NET là HttpRuntime.AppDomainAppPath. Tuy nhiên, bạn cũng có thể tìm thấy phương thức Server.MapPath hữu ích. Bạn truy cập phương thức máy chủ qua HttpContext.Current.Server.

Có nói rằng bạn có chắc chắn muốn loại mã này trong chế độ xem của mình hay không. Nó dường như với tôi rằng danh sách các giá trị bạn muốn hiển thị phải được tạo ra bởi bộ điều khiển.

Các vấn đề liên quan