Предпосылка
Я работаю над программой Blazor, которая обрабатывает базу данных компаний и связанные с ней операции CRUD.
Я использую .NET 8.0, пишу в Visual Studio Community 2026 v. 18.3.0, с InteractiveServer в качестве режима рендеринга для всего решения по умолчанию, управляю файлами .xls/.xlsx через ClosedXML 0.102.0.
Цель
Я хочу реализовать функцию, которая позволит пользователю загружать файл .xlsx, перечисляющий все компании, соответствующие последним установленным фильтрам.
Такая функция уже предоставляется внешним API (см. ниже), который работает должным образом вместе с версией MVC той же программы.
проблема
Могу ли я достичь желаемого результата, не прибегая к взаимодействию JavaScript?
Это вопрос, возникший из чистого любопытства, поскольку я изучаю Blazor, пока пишу (и я также не являюсь экспертом в .js и C#), поэтому я хочу, чтобы он был как можно более «чистым». Я исследовал эту тему пару часов и, похоже, вынужден прибегнуть к js.
Код
Вот текущая итерация функции внутри компонента Razor, вызывающая ApiServices для загрузки файла:
public async Task DownloadExcelResults()
{
FiltersDto filters = Filters;
filters.PageNumber = 1;
filters.PageSize = int.MaxValue;
var excelFile = await _service.GetCompaniesExcelAsync(filters);
// Downloads the .xlsx file from the API response
return FileResult(excelFile, "application/vnd.ms-excel", "Companies.xlsx");
}
File и FileResult не работают как возвращаемые типы, поскольку в этом контексте они являются статическими типами, что было головной болью при первом копировании функции из версии MVC.
Вот соответствующая функция ApiServices:
public async Task GetCompaniesExcelAsync(FiltersDto filters)
{
var request = new RestRequest("company/export", Method.Post);
request.AddJsonBody(filters);
var response = await _client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception($"API error: {response.ErrorMessage}");
}
return new MemoryStream(response.RawBytes);
}
А вот сама функция API (я пропускаю заполнение файла .xlsx, поскольку он работает так, как задумано, и я не думаю, что это связано с этой конкретной проблемой):
[HttpPost("export")]
public async Task ExportCompanies(FiltersDto filters)
{
// Populates the sheet
// ...
// Creates an .xls file via ClosedXML
var wb = new XLWorkbook();
// MemoryStream for handling the file
var ms = new MemoryStream();
// Populates the sheet
// ...
wb.SaveAs(ms);
var filename = $"{DateTime.Now:yyyyMMddHHmmss}_{"Companies"}.xlsx";
return File(ms.ToArray(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... js-interop
Могу ли я загрузить файл в проекте Blazor без взаимодействия с JS? ⇐ C#
Место общения программистов C#
-
Anonymous
1770826597
Anonymous
[b]Предпосылка[/b]
Я работаю над программой Blazor, которая обрабатывает базу данных компаний и связанные с ней операции CRUD.
Я использую .NET 8.0, пишу в Visual Studio Community 2026 v. 18.3.0, с InteractiveServer в качестве режима рендеринга для всего решения по умолчанию, управляю файлами .xls/.xlsx через ClosedXML 0.102.0.
[b]Цель[/b]
Я хочу реализовать функцию, которая позволит пользователю загружать файл .xlsx, перечисляющий все компании, соответствующие последним установленным фильтрам.
Такая функция уже предоставляется внешним API (см. ниже), который работает должным образом вместе с версией MVC той же программы.
[b] проблема[/b]
Могу ли я достичь желаемого результата, не прибегая к взаимодействию JavaScript?
Это вопрос, возникший из чистого любопытства, поскольку я изучаю Blazor, пока пишу (и я также не являюсь экспертом в .js и C#), поэтому я хочу, чтобы он был как можно более «чистым». Я исследовал эту тему пару часов и, похоже, вынужден прибегнуть к js.
[b]Код[/b]
Вот текущая итерация функции внутри компонента Razor, вызывающая ApiServices для загрузки файла:
public async Task DownloadExcelResults()
{
FiltersDto filters = Filters;
filters.PageNumber = 1;
filters.PageSize = int.MaxValue;
var excelFile = await _service.GetCompaniesExcelAsync(filters);
// Downloads the .xlsx file from the API response
return FileResult(excelFile, "application/vnd.ms-excel", "Companies.xlsx");
}
File и FileResult не работают как возвращаемые типы, поскольку в этом контексте они являются статическими типами, что было головной болью при первом копировании функции из версии MVC.
Вот соответствующая функция ApiServices:
public async Task GetCompaniesExcelAsync(FiltersDto filters)
{
var request = new RestRequest("company/export", Method.Post);
request.AddJsonBody(filters);
var response = await _client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception($"API error: {response.ErrorMessage}");
}
return new MemoryStream(response.RawBytes);
}
А вот сама функция API (я пропускаю заполнение файла .xlsx, поскольку он работает так, как задумано, и я не думаю, что это связано с этой конкретной проблемой):
[HttpPost("export")]
public async Task ExportCompanies(FiltersDto filters)
{
// Populates the sheet
// ...
// Creates an .xls file via ClosedXML
var wb = new XLWorkbook();
// MemoryStream for handling the file
var ms = new MemoryStream();
// Populates the sheet
// ...
wb.SaveAs(ms);
var filename = $"{DateTime.Now:yyyyMMddHHmmss}_{"Companies"}.xlsx";
return File(ms.ToArray(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79887551/in-a-blazor-project-can-i-download-a-file-without-js-interop[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия