0

こんにちは、かみそりを使用してTable、いくつかの異なる詳細を持つファイルのリストを含むを表示しています。彼の名前をクリックしたときにファイルを表示したいだけです。

これが私の見解です:

<table>
<tr>
    <th>
        Nom
    </th>
    <th>
        Date
    </th>
    <th>
        Uploader
    </th>
    <th></th>
</tr>

@foreach (var item in Model) {
<tr>
    <td>
          <a href = @Url.Action("ViewAttachment", new { fileName = item.Path }) > @Html.DisplayFor(modelItem => item.Nom) </a>  


    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Date)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Uploader)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.DocumentID }) |
        @Html.ActionLink("Details", "Details", new { id=item.DocumentID }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.DocumentID })
    </td>
</tr>
}

</table>

私のアクションでは、ファイルのパスをコントローラーに送信します。しかし、私はそれを処理する方法がわかりません。

public ActionResult ViewAttachment(string fileName)
    {
        try
        {
            return Redirect(filename);
        }
        catch
        {
            throw new HttpException(404, "Couldn't find " + fileName);
        }


    } 

クリックするとリダイレクトされますdomain/Document/Content/myfileが、ファイルはdomain/Content/myfile

4

1 に答える 1

3

彼の名前をクリックしたときにファイルを開く方法は?

ファイルがクライアントから直接アクセスできるサーバー上の場所にある場合、コントローラーのアクションは必要ありません。リンクがこの場所を直接指すようにすることができます。

<a href="@Url.Content("~/content/" + System.IO.Path.GetFileName(item.Path))"> 
    @Html.DisplayFor(modelItem => item.Nom) 
</a>  

クライアントからファイルにアクセスできない場合は、File 結果を返すことによってこのファイルを提供するコントローラー アクションが必要です。

public ActionResult ViewAttachment(string fileName)
{
    fileName = System.IO.Path.GetFileName(fileName);
    string file = Server.MapPath("~/Content/" + fileName);
    if (!File.Exists(file))
    {
        return HttpNotFound();
    }  
    return File(file, fileName, "application/octet-stream");
}

ターゲット ファイルを新しいタブで開きたい場合は、target="_blank"属性をアンカーに追加できます。

<a href="@Url.Content("~/content/" + System.IO.Path.GetFileName(item.Path))" target="_blank"> 
    @Html.DisplayFor(modelItem => item.Nom) 
</a>  
于 2013-05-16T08:32:43.367 に答える