Я написал действие, позволяющее пользователю экспортировать текст в виде TXT-файла.Кнопка в представлении вызывает это действие через ajax.Я использовал ajax, потому что я хочу, чтобы пользователь оставался на той же странице, пока он загружает текстовый файл.При нажатии кнопки действие выполняется.Но это не работает, как ожидалось.Вызов ajax вызывает обновление страницы, и всплывающее окно загрузки файла не отображается.
Может кто-нибудь помочь мне исправить это.
Вот фрагменты кода: Просмотр
<button id="exportButton">
<span>Export to Text</span>
@Html.HiddenFor(m => m.VersionId)
<input type="hidden" id="exportUrl" value='@Url.Content("~/LegalAgreement/_Export") ' />
<script type="text/javascript">
$(document).ready(function () {
$("#exportButton").click(function () {
$.ajax({
url: $('#exportUrl').val(),
type: 'post',
cache: false,
data:
{
id: $('#VersionId').val()
},
success: function () { return false; }
}); //end ajax
});
});
Контроллер
public ActionResult _Export(int id)
{
Response.AddHeader("content-disposition", "attachment; filename=fileName.txt");
Response.ContentType = "application/octet-stream";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] extractedData = encoding.GetBytes("the text to be exported");
return File(extractedData, "application/octet-stream");
}
РЕШЕНИЕ
Спасибо за все ответы!
Я сделалНе нужно использовать AJAX.Это код, который работает как ожидалось:
Вид
<a id="exportButton" href='@Url.Action("_Export",new {id = Model.VersionId})'>
<span>Export to Text</span>
</a>
Контроллер
public ActionResult _Export(int id)
{
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] extractedData = encoding.GetBytes("some text");
return File(extractedData, "application/octet-stream", "fileName.txt");
}