我正在MVC中创建一个示例项目。
假设我有两个项目A和B.
在项目A中,我有一个javascript文件,其中包含project A
的索引页并将其放入ID为Widget
的div中。
在project B
索引页面中,我引用了项目A的javascript文件和ID为Widget
的div。
在页面加载时,我想将Project A's index page
加载到Project B's Widget Div
。
这是我的代码
Project A
Index.cshtml (Index view)
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<div id="data">Thi is index page.</div>
Widget.js (JavaScript file)
$(document).ready(function (e) {
$('#widget').load('/Home/Contact', function (response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error: ";
alert(msg + xhr.status + " " + xhr.statusText);
}
});
};
这是另一个项目
Project B
Index view which call the project A's index view
@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="http://localhost:2455/Scripts/Widget.js"></script>
<div id="widget"></div>
<div>Project B Index</div>
上面的示例代码显示项目B的索引视图,而我想显示项目A的索引视图
答案 0 :(得分:2)
如果没有完整的网址,它将无法按照您想要的方式运行。要启用跨域请求,您需要向web.configs添加2个标头
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="access-control-allow-headers" value="content-type"/>
<add name="Access-Control-Allow-Origin" value="*"/>
</customHeaders>
</httpProtocol>
<system.webServer>
或者另一种方式是在项目B的Contact控制器向项目A的控制器发出http请求,然后你将获得没有CORS问题的项目A的控制器的HTML
第二个解决方案是
向本地控制器发出请求
在本地控制器调用下面的代码时,此代码向某个URL发出请求并返回从该URL检索到的所有内容。
var html = "";
StreamReader reader = null;
WebResponse response = null;
try
{
var request = WebRequest.Create("url of project A controller");
response = request.GetResponse();
var dataStream = response.GetResponseStream();
reader = new StreamReader(dataStream);
//here you will get HTML of controller from project A
html = reader.ReadToEnd();
}
finally
{
if (reader != null)
{
reader.Close();
}
if (response != null)
{
response.Close();
}
}
ViewBag.HTML = html;//And then you can use the HTML inside of current controller, simply put @ViewBag.HTML inside of the div.