Попробуйте это в 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 })';
}
});
});
});
ИМХО Всегда лучше использовать стандартный API, где это возможно. Ваш собственный пример показывает это отлично. Вы смогли опробовать свой идентичный код на двух провайдерах, когда один из них не работал должным образом. Переключение на любой собственный API не позволяет вам сделать это.
Если использование EclipseLink в качестве вашего провайдера JPA 2.0 работает хорошо для вас, используйте его. Если вы случайно столкнулись с проблемой, сообщите об ошибке EclipseLink и получите помощь на этом форуме или форумах и новостных группах EclipseLink.
EclipseLink более совместим со стандартами, так как это эталонная реализация для JPA 2, Hibernate имеет некоторые проблемы с совместимостью, но более зрелый.
Одним из основных преимуществ EclipseLink является то, что вы можете вызывать собственные функции SQL непосредственно в ваших запросах JPQL. В Hibernate это не возможно напрямую.
Но в Hibernate больше сообщество, лучшая документация, а также сообщения об ошибках.
Из моего опыта, с Java Perf Profiling. Мои приложения, созданные с использованием Eclipselink, работают намного лучше, чем с Hibernate, как при вставке, так и при извлечении данных. Hibernate, однако, более широко используется и предоставляет больший форум для поддержки.
По этой причине я просто возьму Hibernate.
Просто возьми и придерживайся одного. Стандарты являются лишь конечными рекомендациями, и каждый исполнитель может внедрять или не внедрять стандарты соответствующим образом.
, например,
EclipseLink имеет проблемы с использованием чего-то базового, такого как JPA @Converter
, хотя предположительно недавно исправлено через IBM http://www-01.ibm.com/support/docview.wss?uid = swg1PI73277
Реализация JPQL в Hibernate не понимает логических значений, которые более конкретно стоят сами по себе. Мне пришлось изменить свой JPQL, чтобы сказать
from Participant p where not p.cancelled
-
from Participant p where p.cancelled = false
Другое дело, что вы строите вещи весной, и вы, вероятно, будете делать неправильные, но общие подход изменения загрузчика классов в порядке PARENT_LAST
, чтобы ваши классы использовались вместо серверов приложений.
Если вы планируете действовать надлежащим образом и использовать JPA, поставляемый с сервером приложений, просто будьте осторожны, так как ваша реализация Application Server может содержать ошибки.
Транзакции мудро для вашего приложения, в частности Spring должен обрабатывать вещи для вас.