gpt4 book ai didi

ASP.NET 和火狐浏览器 : why doesn't clicking on a GridView ButtonField do anything?

转载 作者:行者123 更新时间:2023-11-28 02:59:56 25 4
gpt4 key购买 nike

我有一个非常简单的 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>

(在PageLoad中我调用了grid.DataBind(),并且事件处理程序DoStuff不起眼。)

当我在 Internet Explorer 中查看此内容并单击 ButtonField(呈现为链接)时,事件处理程序将按预期触发。当我在 Firefox 中单击它时,没有任何反应。

如果我打开 Firebug 的 Javascript 调试控制台,然后单击链接,则会在 ASP.NET 自动生成的 Javascript onclick 处理程序中显示错误:

theForm is undefined
__doPostBack("grid", "$0")
javascript:__doPostBack('grid', '$0')()
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {\r\n

为什么会发生这种情况以及如何使 ButtonField 在 Firefox 中工作?

(注意:我问这个问题 in order to answer it myself :我已经发现了为什么我会看到上述错误,并想将其记录下来,以利于我自己和他人。如果您知道,请随意添加其他答案ASP.NET 和 Firefox 的其他问题。)

最佳答案

这是由于浏览器在存在无效 HTML 的情况下处理 Javascript 的方式存在差异:具体来说,当表单未用 <html> 包围时和<body>标签。如果没有这些标签,Firefox 似乎会尝试初始化变量 theForm在表单实际存在之前。

添加正确的<html><body>表单周围的标签(在任何情况下都是有效 HTML 所必需的)使得点击处理程序在 IE 和 Firefox 中都可以工作。

注释:

  • 由于许多其他原因,显然无效的 HTML 是最糟糕的做法。我正在开发的页面旨在与呈现周围 HTML 其余部分的母版页一起使用,但(由于各种原因)我是在与母版页隔离的情况下对其进行测试的。
  • 我尝试用一​​个简单的 <asp:Button runat="server"> 重现同样的问题,但这会触发完整的页面刷新回发,因此不会遇到相同的错误。作为 Web 表单 n00b,我不知道 GridView(或此用例)有什么特别之处,使其表现不同(即设置 onclick 处理程序来处理没有页面加载的点击)。
  • 我已将其标记为 wiki,以防其他人可以比我更好地解释这一点。

关于ASP.NET 和火狐浏览器 : why doesn't clicking on a GridView ButtonField do anything?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1389625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com