繁体   English   中英

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

[英]Why is my ASP.NET page injecting this WebResource.axd Javascript file?

当我在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来执行后期操作背上。

  • 这是做什么的?
  • 它来自哪里?
  • 可以摆脱它?
  • 我怎么能摆脱它​​?

这个问题来自的页面


谷歌的一项工作发现表明验证控件会导致这种情况,但我认为我没有任何验证控件。

详细查看WebResource.axd文件显示了许多看起来是样板功能的东西,我无法从任何地方找到任何引用。


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


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

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

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

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

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

要检查的4件事:

  1. 您是否在页面的某处使用UpdatePanel?
  2. 您是否有任何javascript在您的代码中调用Web方法?
  3. 您的母版页中是否包含可能会添加到您的输出中的任何内容?
  4. 您是否引用外部库中的任何控件?

一旦你对此进行了调查,你或许可以至少删除一些关于问题根源的选项。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM