为什么我的ASP.NET页面会注入此WebResource.axd Javascript文件?

时间:2009-08-10 18:26:57

标签: asp.net javascript webresource.axd

当我在ASP.NET页面上查看源代码时,我得到以下代码段:

<script type="text/javascript"> 
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script> 

<script src="/WebResource.axd?d=5lheyan7fritNTjDRpG8vA2&amp;t=633734967316503584" type="text/javascript"></script> 

.aspx文件看起来像这样:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="NaturalDateDemo._Default" %>

<form id="form1" runat="server" enableviewstate="False">
   Enter something to parse:<br />
   <asp:TextBox ID="TextBox1" runat="server" Width="270px"></asp:TextBox>
   <asp:Button ID="Button1" runat="server" Text="Parse" PostBackUrl="Default.aspx" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="true" />
</form>

两个代码块(文字代码和/WebResource.axd中的内容)似乎与基于 JavaScript 的回发相关,我想不出任何理由我的网页需要 JavaScript 才能进行回发。

  • 这是做什么的?
  • 它来自哪里?
  • 可以我摆脱它吗?
  • 如何可以摆脱它?

The page this question is coming from


Google的一项小工作发现this表示验证控件会导致此问题,但我认为我没有任何验证控件。

详细查看WebResource.axd文件显示了许多看起来像锅炉板功能的内容,我无法从任何地方找到任何引用。


经过进一步调查后,似乎我的提交按钮没有按我认为的那样做,因为它的onclick处理程序中有一些JavaScript。但是,使用FireBug我可以看到页面正在进行完全刷新(HTTP响应具有完整的页面文本),所以我不知道那是什么。 OTOH我现在看到一个__EVENTVALIDATION参数不应该存在(因为没有什么可以验证的)所以查找起来可能很有意思。


似乎基于下面的回答者,我遇到的是,即使基本HTML表单可以正常运行,ASP.NET进行回发的默认(仅限?)方式也是通过JavaScript进行的。 (就我个人而言,我认为这是MS部分的一个愚蠢的设计选择;在你要求它做一些没有它的情况下无法完成的事情之前,ASP.NET不应该引入JavaScript依赖。)

基于这种观点,有几个人推测我不知道我在说什么。 (我会因为使用术语“post-back”而错过这个问题,认为它只暗示基于JS的东西。)虽然我不知道ASP.NET的实现细节,但我知道一般的HTTP如何POST的东西是有效的,我的意见是基于考虑如何实现我自己的解决方案,而不仅仅是基于我希望它如何工作。

5 个答案:

答案 0 :(得分:13)

答案比我在这里看到的要简单得多:只需从PostBackUrl中删除Button,所有JavaScript都会像魔法一样消失。

如果没有JavaScript,HTML按钮无法提交到<form action="...">中指定的页面以外的其他页面。但是,如果在PostBackUrl上指定Button,ASP.NET确实提供了开箱即用的可能性。这就是JavaScript的意义:支持非默认的回发。

在这种特定情况下,您的PostBackUrl<form>的{​​{1}}相同,但显然ASP.NET不特殊情况,任何非空字符串都会触发此包装脚本。

答案 1 :(得分:3)

要检查的4件事:

  1. 您是否在页面的某处使用UpdatePanel?
  2. 您的代码中是否有任何javascript调用Web方法?
  3. 您的母版页中是否包含可能会添加到您的输出中的任何内容?
  4. 您是否引用了外部库中的任何控件?
  5. 一旦你对此进行了调查,你或许可以至少删除一些关于问题根源的选项。

    您可以在ASPX上提供任何代码示例吗?

    编辑:您的帖子现在包含指向源页面的链接。该页面在表单上有一个回发按钮,它可以在不进行完整回发的情况下呈现解析结果(请注意整个屏幕不会重新加载)。路径中的webresource URL包含用于完成此操作的javascript函数。您的代码正在进行部分回发,这就是您在页面上有与回发相关的代码的原因。

    编辑#2:要从系统中完全删除回发,您需要删除应用程序当前正在使用的.NET表单提交。您的按钮正在回发,因此需要代码才能执行此回发到您的服务器。如果你想删除它,你需要将旧学HTML直接发布到另一个URL。您将需要一个带有操作URL和表单输入字段的标准POST表单。但是,在这一点上,你有点打败了使用.NET及其回发支持的目的。我想最后一个问题是为什么你需要删除这个javascript?

答案 2 :(得分:1)

这就是.NET回发的工作方式,以及为什么很多人都在移动.NET MVC模型。为了使回发正常工作,.NET实际上依赖于javascript来完成大量的脏工作。你可以真正摆脱它的唯一方法是使用MVC模型。

答案 3 :(得分:0)

从查看您的页面,我不明白您如何“无法想到[您的]页面需要回复的任何理由。”我很清楚,当你点击你的Parse按钮时,你正在调用服务器上的一些方法来解释传入的值并将其转换为日期,然后将该日期返回给浏览器,以便用户可以看到它。

我是否正确地假设您最初没有创建此页面并且几乎没有使用ASP.Net的经验?这不是“MS搞砸了大时间”(正如你在评论Jay S的答案中所提到的那样,可能值得一个复选标记)这就是你的要求似乎已经改变了,现在你需要确保页面工作时禁用JavaScript,这可能与ASP.Net有关,这不是ASP.Net做事的自然方式。然而,这可能需要对页面进行相当大的改革,因为对需求的大多数改变都会发生。

答案 4 :(得分:0)

如果您使用的是继承另一个类的控件,则传递的类型必须是父类的类型,而不是基类