【问题标题】:asp.net onclick event not firedasp.net onclick 事件未触发
【发布时间】:2013-04-30 13:53:30
【问题描述】:

我的 asp.net 按钮遇到了一个奇怪的问题。 一切都很好,我正在编写一个带有一些 ajax 面板和按钮的 webpart,当一个疯狂的错误出现时,它就快完成了。尽管我当时没有告诉我,但我所有的按钮都触发了相同的方法。

好吧,我发现这是由于一个已知问题:http://forums.asp.net/t/1567526.aspx/1

我试图删除被调用的方法以查看其他按钮是否会返回到它们分配的方法,从那时起,按钮不再触发任何事件。 不再...永远...

我放回了方法,用新代码创建了一个新的 webpart,恢复了我的站点的备份,重置了我的服务器,重新启动了 Visual Studio,最后我试图用一个全新的代码创建一个全新的 VS 解决方案.我只有一个带有一个单独的 asp 按钮的页面,但什么也没有发生......

ascx 文件:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PublicationUserControl.ascx.cs" Inherits="CripmeeWebParts.Publication.PublicationUserControl" %>

<asp:Button ID="Valider" runat="server" Text="Valider" />

ascx.cs 文件

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace CripmeeWebParts.Publication
{
    public partial class PublicationUserControl : UserControl
    {
        protected override void OnLoad(EventArgs e)
        {
            EnsureChildControls();
            base.OnLoad(e);
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            Valider.Click += new EventHandler(Valider_Click);
        }

        void Valider_Click(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
    }
}

我把这一切都绑起来了: 在 ascx 代码或 CreateChildControls 上附加事件,使用 onCommand 事件,将按钮放在 &lt;form&gt; 中,将调试器附加到 w3 进程以查看它是否通过我的所有方法。

我只是没有想法...... 感谢您的阅读,任何建议都会很有用。

【问题讨论】:

  • 您上面的代码正在运行(我创建了一个新的 Web 应用程序并对其进行了测试)。错误可能来自其他地方。如果您删除 ajax 面板,您的按钮事件会触发吗?
  • 不,不是。我刚刚检查了服务器是否有最近的更新,但最后一次是在问题出现之前。最近几天我应该是唯一一个在服务器上工作的人,所以我看不到任何其他人可以更改服务器状态。
  • 我试过this,但它不起作用。
  • 我只能测试您在此处发布的内容;到目前为止,上面的代码没有错误。有时,如果在页面生命周期上的控件之前出现错误,则不会触发控件的事件。您可能希望在页面生命周期的每个事件处设置断点,并逐行调试。

标签: asp.net web-parts


【解决方案1】:

我找到的解决方案来了。

我仍然不知道事件为何消失,但我注意到只有当我从管理面板显示 web 部件时它们才被触发(站点操作>设置>webpart 库>单击我的自定义 webpart)。如果我将我的 webpart 添加到测试页面,一切正常。如果其他人有同样的问题,我希望他能阅读这篇文章并避免我失去的一周......

感谢大家的时间和回答:)

【讨论】:

    【解决方案2】:

    放这个

    Valider.Click += new EventHandler(Valider_Click);
    

    Page_Load()Page_Init() 我看不到你打电话给CreateChildControls()

    【讨论】:

    • CreateChildControl 是 webpart 生命周期的一部分,如下所示:link 虽然我尝试了您的解决方案并使用断点:Valider.Click += new EventHandler(Valider_Click); 被调用,但是当我单击时不会触发事件。跨度>
    【解决方案3】:

    试试

    Valider= new Button();
    Valider.Text = "Valider";
    Valider.Click += new  EventHandler(VAlider_Click); 
    Controls.add(Valider)
    

    在您的 CreateChildControls 中

    【讨论】:

    • 它创建了第二个按钮。 (看起来很奇怪,我应该只有一个名为“Valider”的对象)我有一点希望,但第一个和第二个都没有触发该方法。
    【解决方案4】:

    您的按钮需要声明一个 OnClick 事件

    <asp:Button ID="Valider" runat="server" Text="Valider" OnClick="Valider_Click"/>
    

    或在 Page_Load 中调用您的 CreateChildControls

    【讨论】:

    • 我尝试了两种方法:在 ascx 文件上单击 OnClick,就像您说的那样,并将其添加到代码中,就像我在下面的代码中所做的那样。两者都不会触发事件。
    猜你喜欢
    • 2013-03-12
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2020-01-31
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多