2009-09-16 15 views
5

Tengo un programa de carga de archivos escrito en ASP.NET MVC. Actualmente está en mi máquina de desarrollo local, y me gustaría saber cómo (si es posible) generar un enlace para cada archivo cargado, así que cuando se hace clic, se muestra/descarga el elemento, etc.Ruta del mapa del archivo local ASP.NET/MVC

Código actual/marcado que se encarga de mostrar la lista de archivos:

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

me imagino que tendrá que cambiar el código de manejo de archivos de todo una vez que este entre en funcionamiento, pero por ahora esto es suficiente. Sugerencias también son bienvenidas :)

¡Gracias!

Respuesta

12

Uso Url.Content, por ejemplo .:

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

Los medios tilde "la raíz de mi sitio web, donde quiera que pasa a ser." No tiene que poner sus archivos en el Contenido; puedes ponerlos donde quieras bajo la raíz de tu sitio.

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

+1 justo lo que quería (para MVC3 - enlace a elmah.axd), gracias! – ashes999

7

Sí, el equivalente apropiado a BaseDirectory en una aplicación ASP.NET es HttpRuntime.AppDomainAppPath. Sin embargo, también es posible que el método Server.MapPath sea útil. Llegas al método del servidor a través del HttpContext.Current.Server.

Dicho esto, ¿está seguro de que quiere este tipo de código en su vista? Me parece que la lista de valores que desea visualizar debe ser generada por el controlador.

Cuestiones relacionadas