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

C# 从视图中已包含表的文件夹下载文件,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个预先存在的视图/控制器,其中包含一个表,并且我已经从ActionResult向视图传递了一个参数。 是否有可能将文件下载放在与表相同的视图上,到目前为止,我发现的所有示例都创建了一个单独的ActionResult和视图,这是我试图避免的。 有没有一种方法可以创建一个文件夹文件的下载链接,用一个ViewBag或其他东西来代替,这样它就可以在一个视图中调用所有文件 如果我的解释没有意义,这就是我试图做的事情所遵循的链接 这是我现有的控制器和视图 控制器 public ActionResul

我有一个预先存在的视图/控制器,其中包含一个表,并且我已经从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);
    }
public ActionResult P1A1Mark()
{
列表查询=(来自db.submits中的行)
其中row.assignment_no.等于(“1”)&row.group_no==1
按新的{row.assignment\u no,row.student\u no,row.student.firstname,row.student.lasname}将行分组到g中
选择新的标记模型
{
学生号=g.Key.student号,
学生姓氏=g.Key.姓氏,
学生_firstname=g.Key.firstname
}
).ToList();
返回视图(查询);
}
看法

@model-IList
@{
ViewBag.Title=“p1a1标记”;
}
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
批改学生作业
学号
@*@Html.DisplayNameFor(model=>model.student\u no)*@
姓
@*@Html.DisplayNameFor(model=>model.student\u姓氏)*@
名字
@*@DisplayNameFor(model=>model.student\u firstname)*@
团体
提交
@*@DisplayNameFor(model=>model.submitted)*@
结果
@*@DisplayNameFor(model=>model.result)*@
@*@foreach(模型中的var项目){*@
@对于(var i=0;iitem.student\u no)*@
@DisplayFor(modelItem=>modelItem[i]。学生编号)
@*@DisplayFor(modelItem=>item.student\u姓氏)*@
@DisplayFor(modelItem=>modelItem[i]。学生姓名)
@*@DisplayFor(modeleItem=>item.student\u firstname)*@
@DisplayFor(modelItem=>modelItem[i].student\u firstname)
@DisplayFor(modelItem=>modelItem[i]。组号)
@Html.HiddenFor(modelItem=>modelItem[i]。学生编号)
@*@DisplayFor(modelItem=>item.submitted)*@
@Html.CheckBoxFor(modelItem=>modelItem[i]。已提交)
@Html.HiddenFor(modelItem=>modelItem[i]。学生编号)
@*@DisplayFor(modelItem=>item.result)*@
@*@TextBoxFor(modeleItem=>item.result,新的{style=“width:35px;”})*@
@Html.TextBoxFor(modelItem=>modelItem[i]。结果,新的{style=“width:35px;”})%
@Html.HiddenFor(modelItem=>modelItem[i]。学生编号)
}


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

@Html.ActionLink("Click here to download", "DownloadFile", new { fileID = Model.FileID })
<a href="/Files/DownloadFile?fileID=@Model.FileID">Click here to download</a>
甚至像这样手动操作:

@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响应,而不是文件响应。需要发出单独的请求才能获得文件响应。这些链接将促进这些请求

因此,基本上操作顺序是:

  • 用户请求页面
  • 视图被发送给包含文件链接的用户
  • 用户请求文件123
  • 文件123被发送给用户
  • 用户请求文件234
  • 将文件234发送给用户
  • 等等

  • 如果您使用代码将多个文件全部添加到
    .zip
    文件并发送给用户,则可能会在一个响应中发送多个文件。因此,如果用户要下载5个文件,则他们可以下载1个
    .zip
    文件,其中包含5个文件。这有点复杂,但并非完全不常见。

    我不确定我是否需要了解您的要求。如果用于填充此视图的数据包含用于构建下载链接的信息,您不能将这些链接添加到视图中吗?什么不起作用?我想从文件夹中下载一个文件,与我已在视图中显示的数据分开,这是否可行?您可以提供一个链接以在视图中下载该文件.但是文件本身必须是一个单独的请求。你能详细解释一下吗?我是mvc的新手。谢谢,这更能说明我的情况