在新窗口中显示视图

时间:2014-11-10 14:55:55

标签: javascript jquery html asp.net asp.net-mvc

我开发了一个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中定义。

基于上述并假设文件位于路径中,一切都应该链接起来,对吗?那么我还有什么可能做错的呢?

2 个答案:

答案 0 :(得分:1)

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

这可能是一种解决方法,但现在它似乎对我有用。

答案 1 :(得分:0)

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