Выберите Каталог ASP.NET MVC-5

Часть моих требований говорит, что пользователь должен иметь возможность экспортировать таблицу HTML (заполненную через контроллер), чтобы преуспеть. Я могу создать CSV и экспортировать его. Однако мне нужно позволить им выбрать каталог.

HTML5 Ответ:

Однако это не позволяет вам выбрать каталог, а только определенный файл.

JavaScript:

Везде, где я читал, это большая угроза безопасности. Хотя есть некоторые хаки, я действительно не хочу это использовать.

Я попытался сделать вызов FolderBrowserDialog с контроллера, когда вы нажмете на функцию, но мне не хватает ссылки на сборки и вы не можете найти правильный.

Мой вопрос: если вы должны позволить пользователю выбрать каталог, в который файл будет экспортирован, в проекте ASP.NET MVC5, как бы вы это сделали? HTML5, JavaScript/JQuery, С# для меня не имеет значения. Нет угроз безопасности!

Спасибо, парни

2 ответа

Во-первых, когда вы говорите "выберите каталог для экспорта файла в", вы говорите на стороне клиента или на стороне сервера? Если он загружается пользователем в качестве загрузки, вы не можете контролировать ничего: где он хранится или что он даже назвал.

Если вы говорите на стороне сервера, вы можете справиться с этим одним из двух способов. Вы можете просто заполнить список выбора с помощью выбора каталога, а затем использовать его для создания пути в submit. Или вы можете взять более сложный путь, пытаясь создать интерфейс для просмотра файловой системы сервера. Там ничего не создано, чтобы помочь вам здесь; вам придется создать его самостоятельно или найти сторонний инструмент, чтобы сделать это за вас. В основном, вы просто используете инструменты ввода/вывода для чтения списка каталогов и представляете это пользователю в иерархии древовидного стиля.


Вам просто нужно установить заголовок "Content-Disposition" в "attachment", когда вы создаете файл. Это приведет к появлению обычного диалогового окна сохранения браузера, и они смогут перемещаться и сохранять его там, где они хотят.

Поэтому в вашем ActionMethod я предполагаю, что вы делаете что-то вроде:... создаете csv... return File (csvData, "text/csv");

Этот метод имеет перегрузку, которая принимает имя файла по умолчанию. Если вы зададите имя файла, оно автоматически добавит заголовок для размещения содержимого и приведет к загрузке файла вместо открытия.

return File (csvData, "text/csv", "somefile.csv");

licensed under cc by-sa 3.0 with attribution.