将部分视图导出到文本文件

问题描述 投票:0回答:1

我正在编写一个ASP.NET Web应用程序(用于考试的univercity任务)。我有一个数据库,有像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>

输出结果如下所示:

伊万诺夫米哈伊尔,注释总结:16

Kozlov Drink,总备注:12

玛丽安,笔记之和:11

我还需要将其保存为文本文件。想不通怎么样?可能有办法改变Ajax代码中的某些东西吗?

在此先感谢:)希望有人知道如何做到这一点。谷歌没有帮助

c# asp.net-mvc-4
1个回答
1
投票

你可以创建一个控制器动作方法,它通过迭代从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
    }
}

然后,在局部视图中创建一个指向上面提到的动作方法的锚链接:

@Html.ActionLink("Export to TXT", "GetTextFile", "ControllerName")
© www.soinside.com 2019 - 2024. All rights reserved.