ASP.NET和Firefox:为什么';单击GridView按钮字段做什么?

ASP.NET和Firefox:为什么';单击GridView按钮字段做什么?,asp.net,javascript,firefox,Asp.net,Javascript,Firefox,我有一个非常简单的ASP.NET Web表单,看起来有点像以下内容: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="example.aspx.cs" Inherits="example" %> <form runat="server"> <asp:GridView runat="server" id="grid" AutoGenerateColumns="false" OnRowComman

我有一个非常简单的ASP.NET Web表单,看起来有点像以下内容:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="example.aspx.cs" Inherits="example" %>

<form runat="server">
    <asp:GridView runat="server" id="grid" AutoGenerateColumns="false" OnRowCommand="DoStuff">
        <Columns>
            <asp:ButtonField Text="Do stuff" />
        </Columns>
    </asp:GridView>
</form>
为什么会发生这种情况?我如何让ButtonField在Firefox中工作


(注意:我在问这个问题:我已经发现了我看到上述错误的原因,并希望记录下来,以利于我自己和其他人。如果您知道ASP.NET和Firefox的其他问题,请随意添加其他答案。)这是由于浏览器在存在无效HTML时处理Javascript的方式有所不同:特别是当表单没有被
标记包围时。如果没有这些标记,Firefox似乎会在表单实际存在之前尝试初始化表单的变量

在表单周围添加适当的
标记(在任何情况下都是有效HTML所必需的)可以使单击处理程序在IE和Firefox中都能工作

注:

  • 显然,由于许多其他原因,无效HTML是最糟糕的做法。我开发的页面本来打算与母版页一起使用,该母版页呈现了周围HTML的其余部分,但是(出于各种原因),我正在与母版页隔离地测试它
  • 我试着用一个简单的
    重现同样的问题,但这会触发一个整页刷新回发,所以不会出现同样的错误。作为一个Web表单n00b,我不知道GridView(或这个用例)有什么特别之处,使它的行为有所不同(即设置一个
    onclick
    处理程序来处理点击而不加载页面)
  • 我已将此标记为wiki,以防其他人能比我更好地解释这一点

这是由于浏览器在存在无效HTML时处理Javascript的方式不同:特别是当表单没有
标记时。如果没有这些标记,Firefox似乎会在表单实际存在之前尝试初始化表单的变量

在表单周围添加适当的
标记(在任何情况下都是有效HTML所必需的)可以使单击处理程序在IE和Firefox中都能工作

注:

  • 显然,由于许多其他原因,无效HTML是最糟糕的做法。我开发的页面本来打算与母版页一起使用,该母版页呈现了周围HTML的其余部分,但是(出于各种原因),我正在与母版页隔离地测试它
  • 我试着用一个简单的
    重现同样的问题,但这会触发一个整页刷新回发,所以不会出现同样的错误。作为一个Web表单n00b,我不知道GridView(或这个用例)有什么特别之处,使它的行为有所不同(即设置一个
    onclick
    处理程序来处理点击而不加载页面)
  • 我已将此标记为wiki,以防其他人能比我更好地解释这一点

好的-我不确定你是否会让我们悬而未决几天。任何退出投票的人有没有可能就如何改进这个问题提供一些建设性的反馈?我写这篇文章是为了让人们在谷歌上搜索相同的错误信息时发现一些有用的东西。可能是因为你在问为什么无效的html不能在某些浏览器中正确呈现。说句公道话:无效的html确实是根本原因。但是,无论是该行为还是错误消息都没有(对我来说)表明这是问题所在,特别是因为它只在特定的ASP.NET服务器控件配置中出现。对于像我这样的ASP.NET新手来说,除了生成代码以便在某种程度上从HTML中抽象出来之外,对该框架知之甚少,将其记录在某个地方是很有用的,即使它确实可以归结为“愚蠢的新手,修复你的HTML!”。我编辑了我的答案,以强调无效的HTML是问题所在。好吧,我不确定你是否会让我们悬而未决几天。任何离开否决票的人有没有可能就如何改进这个问题提供一些建设性的反馈?我写这篇文章是为了让人们在谷歌上搜索相同的错误信息时发现一些有用的东西。可能是因为你在问为什么无效的html不能在某些浏览器中正确呈现。说句公道话:无效的html确实是根本原因。但是,无论是该行为还是错误消息都没有(对我来说)表明这是问题所在,特别是因为它只在特定的ASP.NET服务器控件配置中出现。对于像我这样的ASP.NET新手来说,除了生成代码以便在某种程度上从HTML中抽象出来之外,对该框架知之甚少,将其记录在某个地方是很有用的,即使它确实可以归结为“愚蠢的新手,修复你的HTML!”。我编辑了我的答案,以强调无效的HTML是问题所在。
theForm is undefined
__doPostBack("grid", "$0")
javascript:__doPostBack('grid', '$0')()
  if (!theForm.onsubmit || (theForm.onsubmit() != false)) {\r\n