在新窗口中显示视图

Display View in New Window

本文关键字:显示 视图 窗口 新窗口      更新时间:2023-09-26

我开发了一个ASP.NET MVC应用程序,它将根据用户输入运行几个预筛选函数。

计划是从现有的HTML/JavaScript应用程序中调用这个新的mvc应用程序。我想在调用应用程序之外的新浏览器窗口中显示控制器的视图。

我的AJAX调用看起来像这个

$.support.cors = true;
$.ajax( {
    url: "http://mvc_url/prescreen",
    data: jsonObject,
    type: "POST",
    processData: false,
    dataType: 'html',
    contentType: "application/json; charset=utf-8",
    timeout: 60000,
    //dataType: "json",
    success: function ( msg )
    {
        ...on success msg = html rendered from view...
    },
    error: function ( XMLHttpRequest, textStatus, errorThrown )
    {
        ...error handling...
    }
} );

我已经测试过了,在成功的时候,msg确实包含了视图中完全呈现的HTML。我的问题是如何使用渲染的HTML打开一个新窗口?。

我试过以下几种:

var newWindow = window.open( "", "", "" );
newWindow.document.write( msg );

这似乎奏效了。有点。新窗口打开并显示html,但我的样式表和视图中包含的javascript文件都不见了。那么,如果使用上面的window.open代码是正确的,那么我该如何删除必要的样式表和javascript文件呢?

编辑

利用AndyJ提供的建议,我修改了我的视图,以包含基于我的基本应用程序的相对路径。这是我的MVC 返回的标记

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Offer</title>
    <link href="../css/site.css", type="text/css" rel="stylesheet" />
</head>
<body>
    <div class="container body-content">
    ... Page Content ...
    <script src="/baseapp/Scripts/jquery-1.8.2.js" type="text/javascript"></script>
    <script src="/baseapp/js/someInclude.js" type="text/javascript"></script>
    <script type="text/javascript">
        InitializeForm();
    </script>

InitializeForm方法是在someInclude.js.中定义的

基于以上内容,并假设文件位于路径中,所有内容都应该连接起来,对吗?那么,我还可能做错了什么呢?

除了Andy J提供的帮助(谢谢),我还发现当在新窗口中呈现响应时,JQuery库正在加载AFTER我的初始化脚本。为了避免这种情况,我只需将事件处理程序添加到控件的内联属性中。

这可能是一个变通办法,但目前它似乎对我有效。

如果您在AJAX请求中返回原始HTML,您可能需要在那里添加CSS和JS引用。您并没有真正返回通常具有包含引用的布局的视图。