Эти странные цифры появляются из-за того, что компьютеры используют двоичную (базовую 2) систему счисления, а мы используем десятичную (базовую 10).
Есть большинство дробных чисел, которые не могут быть точно представлены в двоичном или десятичном или в обоих. Результат - округленное (но точное) число результатов.
Попробуйте это в ajax success
success: function () {
window.location = '@Url.Action("DownloadAttachment", "PostDetail")';
}
Обновленный ответ:
public ActionResult DownloadAttachment(int studentId)
{
// Find user by passed id
// Student student = db.Students.FirstOrDefault(s => s.Id == studentId);
var file = db.EmailAttachmentReceived.FirstOrDefault(x => x.LisaId == studentId);
byte[] fileBytes = System.IO.File.ReadAllBytes(file.Filepath);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, file.Filename);
}
Запрос Ajax:
$(function () {
$("#DownloadAttachment").click(function () {
$.ajax(
{
url: '@Url.Action("DownloadAttachment", "PostDetail")',
contentType: 'application/json; charset=utf-8',
datatype: 'json',
data: {
studentId: 123
},
type: "GET",
success: function () {
window.location = '@Url.Action("DownloadAttachment", "PostDetail", new { studentId = 123 })';
}
});
});
});
public FileResult DownloadGeneralDocs(string docName)
{
string fileName = docName+".pdf";
var path = _globalWebSettings.Value.DownloadGeneralDocsPath;
string filePath = "";
if (fileName!="")
{
filePath = (_env.WebRootPath + string.Format("{0}{1}",path, fileName));
}
FileInfo file1 = new FileInfo(filePath);
byte[] fileBytes = System.IO.File.ReadAllBytes(file1.FullName);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
view.cshtml:
<script>
$(document).ready(function () {
$("#docTable tbody tr td button").click(function (e) {
var docName = $(this).closest("tr").find(".document_td_data").text();
$.ajax({
url: '@Url.Action("DownloadGeneralDocs", "Documents")',
dataType: "html",
cache:false,
data: { 'docName': docName },
success: function (data) {
window.location.href = "@Url.RouteUrl(new
{ Controller = "Documents", Action = "DownloadGeneralDocs" })/?docName=" + docName ;
},
error: function (err, response) {
console.log(err, response);
alert(err, response.responseText);
}
})
});
});
Я думаю, что нет необходимости в вызове Ajax, который вы можете сделать, просто используя гиперссылку, как показано ниже.
Просмотреть код
<a href="@Url.Action("DownloadAttachment", "PostDetail", new { studentId = 123 })">Download Form</a>
Метод контроллера
public ActionResult DownloadAttachment(int studentId)
{
// Find user by passed id
var file = db.EmailAttachmentReceived.FirstOrDefault(x => x.LisaId == studentId);
byte[] fileBytes = System.IO.File.ReadAllBytes(file.Filepath);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, file.Filename);
}
Ниже метод поможет вызывать действие из запроса Ajax из диалогового окна jQuery, и он выполняет действие и может быть закрыто диалоговое окно, как только результат возврата результата результата
Controller
[HttpGet]
public ActionResult DownloadCampaign(string filePath, string mode)
{
string contentType = string.Empty;
var sDocument = filePath;
if (!System.IO.File.Exists(sDocument))
{
return HttpNotFound();
}
if (mode == "action")
return Json(new {fileName = filePath}, JsonRequestBehavior.AllowGet);
if (sDocument.Contains(".pdf"))
{
contentType = "application/pdf";
}
else if (sDocument.Contains(".docx"))
{
contentType = "application/docx";
}
else if (sDocument.Contains(".xls"))
{
contentType = "application/xlsx";
}
return File(sDocument, contentType, sDocument);
}
JQuery - Ajax Request
$(document)
.ready(function() {
$("#btnDownload").click(function () {
var file = $("#FilePath").val();
$.ajax({
url: '@Url.Action("DownloadCampaign", "FileList")',
data: { filePath: file, mode:'action' },
method: 'GET',
dataType: 'json',
//contentType: 'application/json; charset=utf-8',
success: function(data) {
@*window.location = '@Url.RouteUrl("DownloadCampaign", "FileList", new { filePath = data1.fileName })';*@
window.location.href = "@Url.RouteUrl(new
{ Controller = "FileList", Action = "DownloadCampaign" })/?filePath=" + data.fileName + "&mode=download";
$("#downloadFile_dialog").dialog("close");
},
error: function (req, status, errorObj) {
alert("Error");
}
});
});
});
Пожалуйста, обратитесь ко мне, если вам нужна дополнительная информация об этом.