如何在ASP.NET中输出原始JavaScript

3
我希望能够在aspx响应中输出原始JavaScript。使用response.write会失败,因为它会将所有的asp.net内容与JavaScript一起转储到页面中,例如:
...
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTAxODk4MjA3OWRk9jVlI2KaQPiVjEC+P0OPYGV74vKjJQZuwD6OaHhb+U0=" />
...

有没有办法在不输出页面上所有其他asp.net内容的情况下,仅将原始文本输出到输出中?我试图按以下方式使用页面:
<script src="mypage.aspx"></script> 

这个页面包含 JavaScript,它会触发 aspx 页面的操作,但是 Chrome 浏览器不喜欢它,因为它期望得到纯 JavaScript 代码,而实际上它获得了混合了标记和 .NET 注入内容的 JavaScript 代码。

请不要评论我为什么要这样做!我正在解决一个非常具体的问题。

5个回答

6
使用 .ashx 通用处理程序。然后,您可以设置 context.Response.ContentType = "text/javascript" 并仅使用 Response.Write

通用处理程序用于这些情况。 - Brownman98
首选使用ashx,如果必须使用aspx,则可以调用Response.Clear()。 - Frank Schwieterman
非常感谢,这个可行。然而,我的JavaScript调用了ashx上的Web方法,但它还没有完全工作,但弹出窗口却没有问题...仍需要解决一些细节问题... - Zunandi

3
我不确定我理解您的问题,但您可以尝试类似以下的操作:
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "registerSomething", "doSomething = function(){ ... }", true);

3
您可以禁用viewstate等,然后从aspx文件中删除所有内容。
<%@Page ... EnableViewState="false" EnableViewStateMac="false"%>

不要在aspx文件中包含其他内容,也不需要使用runat=server。然后在codebehind中使用response.write编写你的javascript代码。

我赞同上面Joey的观点:ASHX是实现你想要的功能最常见/被接受的方式。不过,如果由于某种原因你被要求在ASPX页面内完成这个任务,这个回答(来自aepheus)应该会有所帮助。 - mikemanne

1

使用WebForms会很困难。我能想到的最好的方法是将MVC添加到您的项目中,这样您就可以更好地控制输出。(是的,MVC和WebForms可以在同一个项目中共存)。

这样,您仍然可以利用.aspx语法(或者更酷的Razor语法)来生成javascript文件,而不会被WebForms添加所有烦人的东西到您的输出中。


1

我需要这个,以下是我的解决方案:

创建了一个名为script.aspx的文件,其中包含直接的JavaScript和页面头指令。然后在JavaScript中,我能够插入对静态方法的调用:

<%@ Page Language="C#" ContentType="text/javascript" %>

function someFunction()
{
    var someVar;

    someVar="<%= MyClass.MyMethod() %>";
}

那只返回所需服务器端插入的纯 JavaScript:
function someFunction()
{
    var someVar;

    someVar="Some string returned by my method";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接