【问题标题】:Set ContentType of new window opened in JavaScript following MVC post在 MVC 帖子之后设置在 JavaScript 中打开的新窗口的 ContentType
【发布时间】:2011-09-17 11:17:12
【问题描述】:

我需要打开一个新窗口并将内容设置为单击链接时向我的 MVC 控制器发布的任何内容。以下是我目前的做法。

jQuery.ajax({
        type: "POST",
        url: '/controller/mycontroller',
        data: { mydata: data },
        error: function (xhr, status, error) {
        },
        success: function (response) {
            win_detail = window.open('', 'name');
            win_detail.document.write(response);
        }
    });

控制器当前正在处理页面上应包含的 html 并将其放入 ViewBag 中。它还将 Response.ContentType 应该放在 ViewBag 中。我的 mycontroller.cshtml 我有这样的东西。

@{
Response.ContentType = ViewBag.ContentType;
}

<head></head>
<body>
@ViewBag.MyHtml
</body>

这实际上并没有设置 ContentType。有谁知道我该怎么做?我可以将我的整个结构更改为实现此目的的任何结构。

【问题讨论】:

  • 你不能只使用get请求并使用给定的url打开新窗口吗?

标签: javascript ajax model-view-controller asp.net-mvc-3 contenttype


【解决方案1】:

不要通过 ViewBag 将 ContentType 传递给视图,而是在返回之前尝试在控制器中设置它。

【讨论】:

  • 我会用 Response.ContentType = newContentType; 来做吗?这似乎也不起作用。我认为问题与我只是将返回的响应粘贴到已创建的窗口中而不是使用正确的内容类型创建它的事实有关。就是不知道怎么改。
【解决方案2】:

如果没有其他原因,我会尝试使用 GET 请求并打开指向给定 URL 的窗口。

win_detail = window.open('/controller/action?mydata=' + data, 'name');

根据您的数据,您可能需要对其进行不同的序列化。

var form_data = $('form').serialize();
win_detail = window.open( '/controller/action?' + form_data, 'name');

【讨论】:

  • 谢谢,我认为我的数据对于 GET 来说太大了,但我试过了,它成功了。
猜你喜欢
  • 2023-03-05
  • 2018-03-03
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多