[英]what is this ScriptResource.axd And WebResource.axd file and why it is loading 10 times in my page
[英]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&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件事:
一旦你对此进行了调查,你或许可以至少删除一些关于问题根源的选项。
您能在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.