Jquery 使用PartialView在模式窗口中显示PDF文件

Jquery 使用PartialView在模式窗口中显示PDF文件,jquery,asp.net-core,modal-dialog,Jquery,Asp.net Core,Modal Dialog,在我的Asp.NETCore(MVC,Core2.2)中,我在整个网站中使用了一种通用模式弹出窗口 在布局页面中,我有模式的基本代码: 函数showGenericModel(事件){ var src=event.target | | event.src元素; //查找包含适当装饰的父级 var url=$(src).closest(“*[dataurl]”)。data('url'); //触发HTTP GET $.get(url、函数(数据){ //填充内容并显示模式 $('#modalGe

在我的Asp.NETCore(MVC,Core2.2)中,我在整个网站中使用了一种通用模式弹出窗口

在布局页面中,我有模式的基本代码:


函数showGenericModel(事件){
var src=event.target | | event.src元素;
//查找包含适当装饰的父级
var url=$(src).closest(“*[dataurl]”)。data('url');
//触发HTTP GET
$.get(url、函数(数据){
//填充内容并显示模式
$('#modalGeneric').html(数据);
$('modalGeneric').modal('show');
});
}
然后我可以通过如下链接将其称为(打开):


它从控制器调用一个操作,并打开包含其余模态代码的所需PartialView。它是有效的

下面是本文中的示例:我想在我的模式弹出窗口中显示PDF

因此,我将这两个操作添加到我的控制器:

public IActionResult PdfPartial(int id)
{
    ViewBag.Id = id;
    return PartialView("_PartialDocumentPreview");
}

public async Task<IActionResult> ShowModalDocument(int id)
{
    string filePath = "~/file/test.pdf";
    var contentDisposition = new System.Net.Mime.ContentDisposition
    {
        FileName = "test.pdf",
        Inline = true
    };
    Response.Headers.Add("Content-Disposition", contentDisposition.ToString());
    return File(filePath, System.Net.Mime.MediaTypeNames.Application.Pdf);
}
public IActionResult PdfPartial(内部id)
{
ViewBag.Id=Id;
返回PartialView(“PartialDocumentPreview”);
}
公共异步任务ShowModalDocument(int-id)
{
var file=\u docs.GetDocument(id);
file.Contents=wait_docs.Download(doc);
var contentDisposition=new System.Net.Mime.contentDisposition
{
FileName=file.Title,
内联=真
};
Add(“contentDisposition”,contentDisposition.ToString());
var memory=newmemoryStream(file.Contents);
返回文件(memory.ToArray()、System.Net.Mime.MediaTypeNames.Application.Pdf);
}
以及PartialView(“PartialDocumentPreview”):


接近
PDF将打开,但不会以模式弹出窗口的形式打开,而是作为一个新页面(url类似:

我做错了什么,它不能作为弹出窗口打开

编辑(根据以下答案中的@Rena建议)- 我刚刚将
href
更改为
数据url
,它可以工作:


我做错了什么,它不能作为弹出窗口打开

这是因为您在

@节脚本{
$(函数(){
var url=“@url.Action”(“PdfPartial”,“ZavarovalnePolice”,new{id=1})”;
console.log(url);
$('.ml-1')。单击(函数(){
$.ajax({
url:url,
键入:“获取”,
数据类型:“html”,
成功:功能(数据){
控制台日志(数据);
$('#modalGeneric').html(数据);
$('modalGeneric').modal('show');
}
})
});
});           
}
2.控制员:

public IActionResult PdfPartial(int id)
{
    ViewBag.Id = id;
    return PartialView("_PartialDocumentPreview");
}

public async Task<IActionResult> ShowModalDocument(int id)
{
    string filePath = "~/file/test.pdf";
    var contentDisposition = new System.Net.Mime.ContentDisposition
    {
        FileName = "test.pdf",
        Inline = true
    };
    Response.Headers.Add("Content-Disposition", contentDisposition.ToString());
    return File(filePath, System.Net.Mime.MediaTypeNames.Application.Pdf);
}
public IActionResult PdfPartial(内部id)
{
ViewBag.Id=Id;
返回PartialView(“PartialDocumentPreview”);
}
公共异步任务ShowModalDocument(int-id)
{
字符串filePath=“~/file/test.pdf”;
var contentDisposition=new System.Net.Mime.contentDisposition
{
FileName=“test.pdf”,
内联=真
};
Add(“contentDisposition”,contentDisposition.ToString());
返回文件(文件路径,System.Net.Mime.MediaTypeNames.Application.Pdf);
}
使用默认css样式,3.pdf会弹出非常小的窗口,您可以在主视图而不是局部视图中添加如下css样式:

<style>
.modal-dialog {
    height: 90%; /* = 90% of the .modal-backdrop block = %90 of the screen */
}
.modal-content {
    height: 100%; /* = 100% of the .modal-dialog block */
}
#PdfModal {
    height: 100%;
}

.模态对话框{
高度:90%;/*=屏幕的90%。模式背景块=%90*/
}
.模态内容{
高度:100%;/*=模态对话框块的100%*/
}
#PDF模式{
身高:100%;
}
4.结果:

您能否分享有关控制器和整个视图代码的更多详细信息?关于您的
\u文档和
项目是什么。id
\u文档是一个存储库,其中包含返回文档的方法(附件)DB中的数据和
item.id
是视图模型中文档的id。我将从下面的答案中尝试您的解决方法谢谢。您答案中的第一句话就是解决方案(这是因为您在链接中添加href,默认情况下它将进入PdfPartial操作,如果使用jQuery,则无需添加).所以,我刚刚将
href
更改为
数据url
,一切都很好!