当我在我的 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
不应该存在的论点(因为没有什么可验证的),因此查找起来可能很有趣。
似乎基于下面的回答者,我遇到的是 ASP.NET 执行回发的默认(唯一?)方式是通过 JavaScript,即使基本的 HTML 表单就可以了。(我个人认为这在 MS 部分是一个愚蠢的设计选择;ASP.NET 不应该引入 JavaScript 依赖项,除非你要求它做一些没有它就无法完成的事情。)
基于这种观点,一些人猜测我不知道我在说什么。(我承认我错过了使用术语“post-back”来混淆这个问题,认为它只暗示基于 JS 的东西。)虽然我不知道 ASP.NET 的实现细节,但我知道一般的 HTTP POST 的东西是有效的,我的意见是基于考虑我将如何实现我自己的解决方案,而不仅仅是基于我希望它如何工作。