从已包含表的视图中的文件夹下载文件

时间:2015-09-01 16:30:31

标签: c# asp.net-mvc razor

我有一个包含表的预先存在的视图/控制器,我已经从ActionResult向视图传递了一个参数。 是否可以在与表相同的视图上下载文件,到目前为止我找到的所有示例都创建了一个单独的ActionResult和视图,我试图避免它。 有没有办法用ViewBag或其他东西创建文件夹文件的下载链接,以便它可以在一个视图中调用所有文件?

如果我的解释没有意义,那就是我正在追踪的链接。

Download File in MVC4

这是我现有的控制器和视图

控制器

public ActionResult P1A1Mark()
    {


        List<MarkModel> query = (from row in db.submits
                                     where row.assignment_no.Equals("1") && row.group_no == 1
                                     group row by new { row.assignment_no, row.student_no, row.student.firstname, row.student.surname } into g
                                     select new MarkModel
                                     {
                                         student_no = g.Key.student_no,
                                         student_surname = g.Key.surname,
                                         student_firstname = g.Key.firstname

                                     }
                                        ).ToList();

        return View(query);
    }

查看

&#13;
&#13;
@model IList<MvcApplication2.Models.MarkModel>

@{
    ViewBag.Title = "P1A1Mark";
}

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<h2>Mark Student Assignments</h2>
    

<table class="table">
    <tr>
        <th>
            Student Number 
            @*@Html.DisplayNameFor(model => model.student_no)*@
        </th>
        <th>
            Surname
            @*@Html.DisplayNameFor(model => model.student_surname)*@
        </th>
        <th>
            Firstname
            @*@Html.DisplayNameFor(model => model.student_firstname)*@
        </th>
          <th>
            Group
        </th>
         <th>
             Submitted
            @*@Html.DisplayNameFor(model => model.submitted)*@
        </th>
        <th>
            Result
            @*@Html.DisplayNameFor(model => model.result)*@
        </th>

        <th></th>
    </tr>

@*@foreach (var item in Model) {*@
@for  (var i = 0; i < Model.Count; i++)  {
    <tr>
        <td>
            @*@Html.DisplayFor(modelItem => item.student_no)*@
            <div style="width:150px;float:left;">
            @Html.DisplayFor(modelItem => modelItem[i].student_no)
                </div>
        </td>
        <td>
            @*@Html.DisplayFor(modelItem => item.student_surname)*@
            <div style="width:100px;float:left;">
            @Html.DisplayFor(modelItem => modelItem[i].student_surname)
                </div>
        </td>
        <td>
            @*@Html.DisplayFor(modelItem => item.student_firstname)*@
            <div style="width:100px;float:left;">
            @Html.DisplayFor(modelItem => modelItem[i].student_firstname)
                </div>
        </td>
        <td>
            <div style="width:100px;float:left;">
            @Html.DisplayFor(modelItem => modelItem[i].group_no)
                @Html.HiddenFor(modelItem => modelItem[i].student_no)
                </div>
        </td>
        <td>
            @*@Html.DisplayFor(modelItem => item.submitted)*@
            <div style="width:100px;float:left;">
            @Html.CheckBoxFor(modelItem => modelItem[i].submitted)
            @Html.HiddenFor(modelItem => modelItem[i].student_no)
                </div>
        </td>
        <td>
            @*@Html.DisplayFor(modelItem => item.result)*@
            @*@Html.TextBoxFor(modelItem => item.result, new {style = "width: 35px;"})*@
            <div style="width:100px;float:left;">
            @Html.TextBoxFor(modelItem => modelItem[i].result, new {style = "width: 35px;"})%
                @Html.HiddenFor(modelItem => modelItem[i].student_no)
                </div>
        </td>

    </tr>
}

</table>
    <br />
    <br />
    <button type="submit">Submit Marks</button>
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

如果您的模型包含足够的数据来构建下载文件的链接,那么您只需将这些链接添加到视图中即可。我不知道你的模型或你需要的链接格式,所以这只是一个例子。但它可能看起来像这样:

@Html.ActionLink("Click here to download", "DownloadFile", new { fileID = Model.FileID })

或者甚至只是手动这样:

<a href="/Files/DownloadFile?fileID=@Model.FileID">Click here to download</a>

但是,如果您有用于创建该链接的数据,则可以构建指向您文件的链接,您可以在视图中执行此操作。

无法做到的一件事(听起来就像你想要的那样)是通过视图发送文件本身。 HTTP请求和响应是非常简单的事情。包含此视图的响应是HTML响应,而不是文件响应。需要单独的请求来获取文件响应。这些链接可以促进这些请求。

基本上,操作的顺序是:

  1. 用户请求页面
  2. 查看发送给包含文件链接的用户
  3. 用户请求文件123
  4. 文件123发送给用户
  5. 用户请求文件234
  6. 文件234发送给用户
  7. 如果您使用代码将所有文件全部添加到.zip文件并将其发送给用户,则可以在单个响应中发送多个文件。因此,如果用户要下载5个文件,那么他们可以改为下载包含5的.zip文件。这更复杂,但并非完全不常见。