【问题标题】:What is the cause when event does not fire?事件不触发的原因是什么?
【发布时间】:2011-12-16 04:58:04
【问题描述】:

您认为是什么导致网络表单中的事件(任何控件、文本框、按钮等)不触发?在创建这样的事件时需要检查和考虑哪些事项?

考虑这段代码:

<%@ Page Language="C#" MasterPageFile="~/App_Theme/TranByEmployeeMaster.master" AutoEventWireup="true"
    CodeFile="ProcessEmployeePenalty.aspx.cs" Inherits="Transactions_ProcessEmployeePenalty"
    Title="Untitled Page" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
    <asp:GridView ID="gvEmployees" runat="server" HeaderStyle-CssClass="HeaderStyle"
        RowStyle-CssClass="RowStyle" AlternatingRowStyle-CssClass="AlternatingRowStyle"
        FooterStyle-CssClass="FooterStyleGrid" EmptyDataRowStyle-BackColor="White" AutoGenerateColumns="False"
        EmptyDataText="No result were found." ShowFooter="true" DataKeyNames="EmployeePenaltyID">
        <Columns>
            <asp:TemplateField HeaderText="No.">
                <ItemTemplate>
                    <asp:Label ID="lblNo" runat="server" Text='<%# gvEmployees.Rows.Count + 1 %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Update">
                <ItemTemplate>
                    <asp:ImageButton ID="btnUpdateEmployeeGrid" runat="server" ImageUrl="~/App_Resources/images/content/Edit.gif"
                        CommandName="Update" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Delete">
                <ItemTemplate>
                    <asp:ImageButton ID="btnDeleteEmployeeGrid" runat="server" ImageUrl="~/App_Resources/images/content/Delete.png"
                        CommandName="Delete" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:ButtonField HeaderText="EmployeeID" DataTextField="EmployeeID" />
            <asp:ButtonField HeaderText="Penalty Nature" DataTextField="PenaltyNature" />
            <asp:ButtonField HeaderText="Penalty Description" DataTextField="PenaltyDescription" />
            <asp:ButtonField HeaderText="Penalty Amount" DataTextField="PenaltyAmount" />
        </Columns>
    </asp:GridView>
    <%--<asp:Button ID="btnAddPenalty" runat="server" Text="Add Penalty" OnClick="btnAddPenalty_Clicked"
                OnClientClick="return confirm('Are you certain to post the selected cutoff?');" />--%>
    <asp:ImageButton ID="btnAddPenalty" runat="server" SkinID="Add" OnClick="btnAddPenalty_Clicked" />
    <asp:DropDownList ID="sample" runat="server" AutoPostBack="true" OnSelectedIndexChanged="sample_selected">
        <asp:ListItem Value="0" Text="Sample0" />
        <asp:ListItem Value="1" Text="Sample1" />
        <asp:ListItem Value="2" Text="Sample2" />
    </asp:DropDownList>
    <asp:Panel ID="pnlPopUp" runat="server">
        <table>
            <tr>
                <td>
                    <asp:Label ID="lblsample" runat="server" Text="Employee : " />
                </td>
                <td>
                    <asp:DropDownList ID="ddlEmployees" runat="server" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="Label1" runat="server" Text="Penalty Nature : " />
                </td>
                <td>
                    <asp:TextBox ID="tbxPenaltyNature" runat="server" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="Label2" runat="server" Text="Penalty Description : " />
                </td>
                <td>
                    <asp:TextBox ID="tbxPenaltyDescription" runat="server" TextMode="MultiLine" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label ID="Label3" runat="server" Text="Penalty Amount : " />
                </td>
                <td>
                    <asp:TextBox ID="tbxPenaltyAmount" runat="server" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Button ID="btnClose" runat="server" Text="Close" />
                </td>
                <td>
                    <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Clicked" />
                </td>
            </tr>
        </table>
    </asp:Panel>
    <asp:Label ID="lblDummy" runat="server" />
    <ajax:ModalPopupExtender ID="MP" runat="server" TargetControlID="lblDummy" PopupControlID="pnlPopUp"
        CancelControlID="btnClose">
    </ajax:ModalPopupExtender>
</asp:Content>

protected void btnAddPenalty_Clicked(object sender, EventArgs e)
    {
        MP.Show();
    }

我在这个页面上有母版页,但我看不出这段代码没有触发 onclicked 事件的原因。我只想单击和 Imagebutton 然后出现 modalpopup(ajax 控件),其中包含要填充的某些字段然后单击提交并将其保存到数据库但 onclicked 事件不会触发,并且页面的 page_load 事件中的回发也不是开火。

【问题讨论】:

    标签: c# asp.net events webforms


    【解决方案1】:

    事件遵循发布者-订阅者机制。控制/对象总是根据实现引发(触发)事件。问题是是否附加了handler。因此,如果您有兴趣订阅该活动,那么您必须将event handler 附加到那个 event

    查看 MSDN 文章 - Raising an EventEvents (C# Programming Guide)

    【讨论】:

    • 另一个问题是我有办法检查控件是否有和事件处理程序。我使用的是经典的 asp.net 页面。
    【解决方案2】:

    确保启用了自动连线。如果不是,则不会触发任何事件。

    【讨论】:

      【解决方案3】:

      可能的原因可能是您的 javascript 抛出错误。在您的 java 脚本中尝试 window.onerror 函数并使其显示警报。所以,如果那里发生了一些问题,你现在就可以了。

      【讨论】:

        【解决方案4】:

        您是否没有注册该事件(以编程方式或声明方式)? 你有 AutoEventWireup="false" 吗?

        【讨论】:

        • 不,autoeventwireup=true 在我的页面中
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 2014-09-10
        • 2020-05-14
        • 1970-01-01
        • 2016-01-21
        • 2019-06-28
        相关资源
        最近更新 更多