我有一个包含表的预先存在的视图/控制器,我已经从ActionResult向视图传递了一个参数。 是否可以在与表相同的视图上下载文件,到目前为止我找到的所有示例都创建了一个单独的ActionResult和视图,我试图避免它。 有没有办法用ViewBag或其他东西创建文件夹文件的下载链接,以便它可以在一个视图中调用所有文件?
如果我的解释没有意义,那就是我正在追踪的链接。
这是我现有的控制器和视图
控制器
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);
}
查看
@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;
答案 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响应,而不是文件响应。需要单独的请求来获取文件响应。这些链接可以促进这些请求。
基本上,操作的顺序是:
如果您使用代码将所有文件全部添加到.zip
文件并将其发送给用户,则可以在单个响应中发送多个文件。因此,如果用户要下载5个文件,那么他们可以改为下载包含5的.zip
文件。这更复杂,但并非完全不常见。