0

寻找有关正确方法的建议和/或对我当前错误的帮助。

我正在构建两个独立的 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)来使其工作。所以我现在就这样做(尽管这意味着不弹出一个新窗口)。如果有人有一些才华可以补充,我会很高兴听到它。

4

0 回答 0