Как скачать файл по нажатию кнопки на странице Razor? - PullRequest
2 голосов
/ 15 марта 2019

У меня генерируется XML-файл, заполненный информацией со страницы Razor, и я хочу загрузить этот сгенерированный XML-файл одним нажатием кнопки загрузки.Я новичок на страницах Razor, и возвращение файла XML в виде FileResult не работает для меня.Очень помогло бы руководство о том, что писать для моих <a> и как настроить аннотации C # и т. Д.

Мой код .cshtml:

<br/> 
@Html.ActionLink("Link name", "SaveFile", "EditLicense", 
        new { 
           LicenseFileJson = JsonConvert.SerializeObject(Model.License) 
        }) 
<br/> 

Когда это отобразитсяна странице я получаю:

<br/> <a href="">Link name</a><br/> 

и щелчок по ней ничего не дает.

Мой код действия:

public class EditLicenseController : Controller
{
    public FileResult SaveFile(string LicenseFileJson)
    {
        License License = (License)JsonConvert.DeserializeObject(LicenseFileJson);
        LicenseTool tool = new LicenseTool(License);
        string licenseFileString = tool.ToFileString();
        byte[] bytes = Encoding.ASCII.GetBytes(licenseFileString);
        var stream = new MemoryStream();
        var writer = new StreamWriter(stream);
        writer.Write(licenseFileString);
        writer.Flush();            
        Response.Headers.Add("Content-Disposition", "attachment;");
        return File(bytes, "text/xml", "testing123.xml");
    }
    ...

Когда я нажимаю на ссылку, я также не вижуНа вкладке "Сеть" инструментов разработчика Chrome ничего не видно.

Ответы [ 2 ]

0 голосов
/ 16 марта 2019
Значение

Пусто href означает, что что-то не так с вашей конфигурацией маршрутизации. Убедитесь, что в Startup.cs

добавлены следующие строки
app.UseMvcWithDefaultRoute();

или его эквивалент

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});
0 голосов
/ 16 марта 2019

Попробуйте сделать так:

Изменить представление:

@Html.ActionLink("Link name", "SaveFile", "EditLicense", new 
{ 
   LicenseFileJson = JsonConvert.SerializeObject(Model.License) 
});

Изменить действие:

public FileResult SaveFile(string LicenseFileJson)
{
   License License = (License)JsonConvert.DeserializeObject(LicenseFileJson);
   LicenseTool tool = new LicenseTool(License);
   string licenseFileString = tool.ToFileString();
   //byte[] bytes = Encoding.ASCII.GetBytes(licenseFileString);
   //var stream = new MemoryStream();
   //var writer = new StreamWriter(stream);
   //writer.Write(licenseFileString);
   //writer.Flush();            
   //Response.Headers.Add("Content-Disposition", "attachment;");
   return File(System.Text.Encoding.UTF8.GetBytes(licenseFileString), "text/xml", "testing123.xml");
}

Редактировать:

Добавление примера:

Просмотр:

@Html.ActionLink("link name", "SaveFile", "EditLicense", new
{
    LicenseFileJson = "SOME TEXT JUST TO TEST"
});

Моя ссылка отображается как: <a href="/EditLicense/SaveFile?LicenseFileJson=%22SOME%20TEXT%20JUST%20TO%20TEST%22">link name</a>

Действие:

public FileResult SaveFile(string LicenseFileJson)
{            
   return File(System.Text.Encoding.UTF8.GetBytes(LicenseFileJson), "text/xml", "test");
}

Загрузка успешно завершена:

enter image description here

...