我开发了一个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中定义。
基于上述并假设文件位于路径中,一切都应该链接起来,对吗?那么我还有什么可能做错的呢?
答案 0 :(得分:1)
除了Andy J(谢谢)提供的帮助之外,我还发现当在新窗口中呈现响应时,JQuery库正在加载 AFTER 我的初始化脚本。为了避免这种情况,我只是将事件处理程序添加到控件的内联属性中。
这可能是一种解决方法,但现在它似乎对我有用。
答案 1 :(得分:0)
如果要在AJAX请求中返回原始HTML,则可能需要在那里添加CSS和JS引用。您实际上并没有返回通常具有包含引用的布局的视图。