2009-09-16 7 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") %>" /> 

チルダ手段「それがあることを起こるところはどこでも私のサイトのルート。」 Contentにファイルを置く必要はありません。サイトルートの下に置くことができます。

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

+1(MVC3 - elmah.axdへのリンク)、ありがとう! – ashes999

7

はいASP.NETアプリでBaseDirectoryに適切な同等物はHttpRuntime.AppDomainAppPathあります。ただし、Server.MapPathメソッドが便利な場合もあります。 HttpContext.Current.Server経由でサーバーメソッドにアクセスします。

あなたはこの種のコードをあなたの視点で確実にしたいと言われています。あなたが表示したい値のリストがコントローラによって生成されるべきであると私には思われます。

関連する問題