What do you think causes events (of any control, textbox, button, etc) in webforms to not fire? What are the things that need to be checked and considered when creating such an event?
Consider this code:
<%@ 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();
}
I do have master page on this page but i can’t see a reason why this code does not fire the onclicked event. I only want to click and Imagebutton then a modalpopup(ajax control) to appear with certain fields to be filled up then click submit and save it to the database but onclicked event does not fire and also the postback in page_load event of the page is not firing either.
Events follows publisher-subscriber mechanism. Control/object always raise (fire) the events as per implementation. The question is whether a
handleris attached or not. So if you are interested to subscribe the event then you must have to attach anevent handlerto thatevent.Take a look at MSDN article – Raising an Event and Events (C# Programming Guide).