C# - ASP.NET按钮单击事件不起作用

时间:2009-09-16 01:12:32

标签: c# asp.net event-handling obout

我有一个ASP.NET(C#)页面,其中包含一些第三方控件,一些ajaxy内容和一些普通的ASP.NET Button控件。

单击按钮时,按钮点击事件不会触发。

在VS 2008中双击设计模式下的按钮会切换到代码隐藏,但不会创建事件处理程序。

手动创建事件处理程序无济于事。

整个页面太大了,不能包含在这里,但这是最重要的一点:

<%@ Page Language="C#" MasterPageFile="~/basewidepage2.master" AutoEventWireup="true" EnableEventValidation="false" CodeFile="CompanyCompliance.aspx.cs" Inherits="CompanyCompliancePage" Title="3DSS" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Assembly="obout_Grid_NET" Namespace="Obout.Grid" TagPrefix="cc2" %>
<%@ Register Src="usercontrols/CalendarEx.ascx" TagName="CalendarEx" TagPrefix="uc2" %>
<%@ MasterType VirtualPath="~/basewidepage2.master" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceholder1" runat="Server">

    <script type="text/javascript">
         // a bunch of function declarations
    </script>

...和页面上的按钮声明:

<asp:Button ID="LicenseCsvButton" runat="server" Text="Export to CSV" OnClick="LicenseCsvButton_Click" />

...和代码隐藏:

protected void LicenseCsvButton_Click(object sender, EventArgs e)
{
    // get data
    CompanyCompliance cc = new CompanyCompliance(Master.theCompany.ID);
    DataTable dt = cc.BusinessLicenses.Tables[0];

    // send to browser as download
    Tools.SendTableAsCsvToBrowser(Response, dt, "LicenseData");
}

有什么想法吗?它可能是ajax还是什么?也许第三方“obout”网格控制?

更新
我确实在一两个月前解决了这个问题,所以我回到这个问题来为后代回答这个问题,但我不记得我是如何修理的! (诅咒你,老了!)我用jQuery UI取代了一些ASP.NET AJAX控件取得了一些有限的成功,但我认为真正的解决方案是其中一个标签中的一个属性指向一个控件不再存在。

如果您处于相同的情况,请尝试并让我知道评论中的作用,我会发布正确答案。

9 个答案:

答案 0 :(得分:15)

在调试期间,检查按钮的CausesValidation属性。出于某种原因,我的一个页面有一个按钮默认为“True”。当我明确地将它设置为“False”时,一切都有效。

答案 1 :(得分:9)

我知道现在应该解决这个问题,但只是为了分享 - 我只是遇到了类似的问题。在我的情况下,问题是我在页面中有RequiredFieldValidator,因为它是弹出窗口的一部分而不可见。该验证器应该仅在单击其相关的“保存”按钮时调用,但由于我没有设置任何ValidationGroup,因此会阻止页面为任何单击的按钮提交。向右侧按钮添加ValidationGroup即可解决问题。

答案 2 :(得分:3)

最近遇到了同样的问题 - 最终确定原因是该按钮被onbeforesubmit上的juavascript方法禁用(旨在防止多次提交),并且遗憾的是,Web表单在允许之前检查按钮的启用状态要触发的codebehind事件。

答案 3 :(得分:3)

我刚才遇到了这个问题,它是由另一个具有AutoPostBack =“true”的控件引起的,它会在按钮有机会提交表单以触发点击事件之前提交表单。

答案 4 :(得分:2)

更改

CodeFile="CompanyCompliance.aspx.cs" 

CodeBehind="CompanyCompliance.aspx.cs"

相关问题:CodeFile vs CodeBehind

答案 5 :(得分:2)

inherits指令似乎指向一种不存在的类型。

查看CompanyCompliance页面的代码隐藏文件 - (“CompanyCompliance.aspx.cs”)。

你应该找到正确的命名空间和类似“public partial class xxx”的东西,其中xxx是应该与你的inherits指令对应的类的名称。也许你必须完全符合TJB已经说明的名称。

答案 6 :(得分:2)

我有类似的问题,这真的很棘手。我最近将VS 2005 ASP.NET 2.0 Web表单应用程序迁移到VS 2010 ASP.NET 4.0。

很难像预期的那样设置和错误,但按钮没有触发点击事件的问题让我感到紧张。

最后,就像没有在site.master表单中声明提交操作一样简单。我改变了:

<FORM runat="server" name="MainForm" method="post" action="Default.aspx" id="m_mainForm" enctype="multipart/form-data">

<FORM runat="server" name="MainForm" method="post" id="m_mainForm" enctype="multipart/form-data">

动臂。问题解决了。我希望它可以节省数天的故障排除时间。可悲的是,我自己无法在互联网上找到任何相关信息。

答案 7 :(得分:1)

我遇到了这个问题我更改了Button属性“UseSubmitBehavior”= false。现在它正在发挥作用。

答案 8 :(得分:0)

对于未来的答案搜索者:如果您要在代码中分配点击处理程序,请确保它不在IsPostBack == false检查中:

void Page_Load (object oSender, EventArgs oEventArgs)
{
   if (IsPostBack == false)
   {
       oButton += new EventHandler(oButton_Click); // does not work
   }
   oButton += new EventHandler(oButton_Click); // does work
}