将部分视图导出到文本文件
export partial view to text file
我正在编写一个 ASP.NET 网络应用程序(大学考试任务)。我有一个数据库,其中包含 Id、Name、Age、SumNote 等列。首先,我必须对数据库中排名前 5 的学生进行局部视图:
此方法获得前 5 名学生
public class HomeController : Controller
{
StudentContext db = new StudentContext();
public ActionResult ShowTopFive ()
{
var allStudents = db.Students.OrderByDescending(s => s.SumNote).Take(5);
return PartialView(allStudents);
}
}
这是父子视图:
@model IEnumerable<Univercity.Models.Student>
<div id="results">
<h4>Best 5 students</h4>
<ul>
@foreach (var item in Model)
{
<li>@item.Name, Summ of notes: @item.SumNote</li>
}
</ul>
</div>
有了这个,我在我的网页上得到了学生名单
<div>
<h5>Show top 5 students</h5>
</div>
<div>
@using (Ajax.BeginForm("ShowTopFive", new AjaxOptions { UpdateTargetId = "results" }))
{
<input type="submit" value="Show"/>
}
<div id="results"></div>
</div>
输出结果如下所示:
Ivanov Mikhail,音符总数:16
Kozlov Pete,音符总数:12
玛丽·安,音符总数:11
我还需要将它保存为文本文件。不知道怎么办?可能有办法改变 Ajax 代码中的某些内容?
在此先感谢 :) 希望有人知道该怎么做。 Google 没有帮助
您可以创建一个使用 FileStreamResult
的控制器操作方法,方法是迭代从 ToList()
创建的列表并将必要的 属性 值写入流,然后使用 Controller.File()
接受流以让用户下载文本文件的重载:
public ActionResult GetTextFile()
{
var topFiveStudents = db.Students.OrderByDescending(s => s.SumNote).Take(5).ToList();
if (topFiveStudents != null && topFiveStudents.Count > 0)
{
string fileName = "something.txt";
// create a stream
var ms = new MemoryStream();
var sw = new StreamWriter(ms);
foreach (var students in topFiveStudents)
{
// iterate the list and write to stream
sw.WriteLine(string.Format("{0}, Sum of notes: {1}", students.Name, students.SumNote));
}
sw.Flush();
ms.Position = 0;
// return text file from stream
return File(ms, "text/plain", fileName);
}
else
{
// do something else
}
}
然后,创建一个锚点link指向上面提到的局部视图中的那个动作方法:
@Html.ActionLink("Export to TXT", "GetTextFile", "ControllerName")
我正在编写一个 ASP.NET 网络应用程序(大学考试任务)。我有一个数据库,其中包含 Id、Name、Age、SumNote 等列。首先,我必须对数据库中排名前 5 的学生进行局部视图:
此方法获得前 5 名学生
public class HomeController : Controller
{
StudentContext db = new StudentContext();
public ActionResult ShowTopFive ()
{
var allStudents = db.Students.OrderByDescending(s => s.SumNote).Take(5);
return PartialView(allStudents);
}
}
这是父子视图:
@model IEnumerable<Univercity.Models.Student>
<div id="results">
<h4>Best 5 students</h4>
<ul>
@foreach (var item in Model)
{
<li>@item.Name, Summ of notes: @item.SumNote</li>
}
</ul>
</div>
有了这个,我在我的网页上得到了学生名单
<div>
<h5>Show top 5 students</h5>
</div>
<div>
@using (Ajax.BeginForm("ShowTopFive", new AjaxOptions { UpdateTargetId = "results" }))
{
<input type="submit" value="Show"/>
}
<div id="results"></div>
</div>
输出结果如下所示:
Ivanov Mikhail,音符总数:16
Kozlov Pete,音符总数:12
玛丽·安,音符总数:11
我还需要将它保存为文本文件。不知道怎么办?可能有办法改变 Ajax 代码中的某些内容?
在此先感谢 :) 希望有人知道该怎么做。 Google 没有帮助
您可以创建一个使用 FileStreamResult
的控制器操作方法,方法是迭代从 ToList()
创建的列表并将必要的 属性 值写入流,然后使用 Controller.File()
接受流以让用户下载文本文件的重载:
public ActionResult GetTextFile()
{
var topFiveStudents = db.Students.OrderByDescending(s => s.SumNote).Take(5).ToList();
if (topFiveStudents != null && topFiveStudents.Count > 0)
{
string fileName = "something.txt";
// create a stream
var ms = new MemoryStream();
var sw = new StreamWriter(ms);
foreach (var students in topFiveStudents)
{
// iterate the list and write to stream
sw.WriteLine(string.Format("{0}, Sum of notes: {1}", students.Name, students.SumNote));
}
sw.Flush();
ms.Position = 0;
// return text file from stream
return File(ms, "text/plain", fileName);
}
else
{
// do something else
}
}
然后,创建一个锚点link指向上面提到的局部视图中的那个动作方法:
@Html.ActionLink("Export to TXT", "GetTextFile", "ControllerName")