В моем ядре Asp.Net (MVC, ядро 2.2) я использую своеобразное модальное всплывающее окно по всему сайту.
На странице макета у меня есть основной код для модального окна:
<div class="modal fade" id="modalGeneric" role="dialog"></div>
function showGenericModal(event) {
var src = event.target || event.srcElement;
// find the parent that contains proper decorations
var url = $(src).closest("*[data-url]").data('url');
// trigger an HTTP GET
$.get(url, function (data) {
// fill content and show modal
$('#modalGeneric').html(data);
$('#modalGeneric').modal('show');
});
}
и я могу затем вызвать его (открыть) по следующей ссылке:
<a class="ml-1" data-toggle="tooltip" title="Predogled"
href="@Url.Action("PdfPartial", "ZavarovalnePolice", new { id = item.Id })"
onclick="showGenericModal(event);">
</a>
, которая вызывает действие из контроллера и открывает требуемый PartialView, который имеетОстальная часть модального кода. И это работает.
Следуя примерам из этого поста: Как отобразить .pdf файл в модальном окне? Я хочу показать PDF в моем модальном всплывающем окне.
Итак, я добавил эти два Действия в свой контроллер:
public IActionResult PdfPartial(int id)
{
ViewBag.Id = id;
return PartialView("_PartialDocumentPreview");
}
public async Task<IActionResult> ShowModalDocument(int id)
{
var file = _docs.GetDocument(id);
file.Contents = await _docs.Download(doc);
var contentDisposition = new System.Net.Mime.ContentDisposition
{
FileName = file.Title,
Inline = true
};
Response.Headers.Add("Content-Disposition", contentDisposition.ToString());
var memory = new MemoryStream(file.Contents);
return File(memory.ToArray(), System.Net.Mime.MediaTypeNames.Application.Pdf);
}
и PartialView ("_PartialDocumentPreview"):
<div class="modal-dialog" >
<div class="modal-content">
<div class="modal-header">
</div>
<div class="modal-body">
<div id="PdfModal">
<embed src="@Url.Action("ShowModalDocument", "ZavarovalnePolice",
new { id = @ViewBag.Id })" type="application/pdf"
style="width:100%; height:100%"/>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-warning"
data-dismiss="modal">Close</button>
</div>
</div>
</div>
PDF открывается, но не в модальной всплывающей подсказке, а не как новая страница (с URL-адресом вроде: https://localhost:123/ZavarovalnePolice/PdfPartial/1.
Что я делаю не так, что он не открывается как всплывающее окно?
РЕДАКТИРОВАТЬ (согласно предложению @Rena в ответе ниже) - я просто изменил href
на data-url
, и он работает:
<a class="ml-1" data-toggle="tooltip" title="Predogled"
data-url="@Url.Action("PdfPartial", "ZavarovalnePolice", new { id = item.Id })"
onclick="showGenericModal(event);">
</a>