寻找有关正确方法的建议和/或对我当前错误的帮助。
我正在构建两个独立的 MVC3 应用程序:数据驱动站点的管理员和前端。管理员最终将居住在前端的子域中。
作为我的要求之一,我必须在管理员中构建预览功能。用户编辑配置文件或其他内容,并希望在不实际保存的情况下查看他们的更改。
因此,首先,任何人都有建议的方法来显示来自前端的页面以及来自后端的数据?
其次,我的方法和我得到的错误:
首先,当用户在管理应用程序中单击预览时,序列化表单并将其发布到前端的控制器操作:
<script>
$("#previewPost").click(function () {
$.ajax({
async: false,
type: 'POST',
url: 'http://localhost:51569/Home/PreviewIndex',
data: $("form").serialize(),
dataType: 'html',
crossDomain: true,
success: function (data) {
var popup = window.open();
//popup.document.write(data);
}
,
error: function (data) {
console.log(data);
alert('error: ' + data);
}
});
});
在控制器中,我采用传递的模型,调整它以匹配前端的期望,然后返回它。
[HttpPost]
public ActionResult PreviewHome(CurationAdminHomeEditModel postedModel)
{
...some stuff populating the model...
return View("PreviewHome", retModel);
}
最终目标是获取该响应并将其写入新窗口。
但它并没有那么远。我的初始 POST 工作正常,我进入控制器操作并发送响应。我可以逐步浏览返回视图并看到它被填充。但是,一旦该响应被反馈到我的 jquery 结果中,它就会作为错误出现,并带有以下详细信息:
[Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS
frame :: http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js ::
<TOP_LEVEL> :: line 4" data: no]
那么,有什么想法吗?
编辑 根据下面与 Kevin 的讨论,我还将其添加到每个应用程序的 web.config 中:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
我在 Firefox 中仍然得到相同的响应,在 Chrome 中运行给我这个错误:
XMLHttpRequest 无法加载 localhost:51569/Home/PreviewIndex?。来源 localhost:51566 > 不被 Access-Control-Allow-Origin 所允许。
编辑 2 - 伪解决方案
仍然不清楚是什么原因造成的,但我可以通过实际发回表单(没有 ajax)来使其工作。所以我现在就这样做(尽管这意味着不弹出一个新窗口)。如果有人有一些才华可以补充,我会很高兴听到它。