экспортировать частичное представление в текстовый файл - PullRequest
0 голосов
/ 18 марта 2019

Я пишу веб-приложение 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>

результат вывода выглядит следующим образом:

Иванов Михаил, сумма заметок: 16

Козлов Пит, Сумма нот: 12

Мэри Энн, сумма нот: 11

Мне также нужно сохранить его как текстовый файл. Не можете понять, как? Может быть, есть способ что-то изменить в коде Ajax?

Заранее спасибо :) Надеюсь, кто-то знает, как это сделать. Google не помог

1 Ответ

1 голос
/ 19 марта 2019

Вы можете создать метод действия контроллера, который использует 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")
...