Learning
Learning

Reputation: 20001

User Control button not firing from webform page

I have created a user control for visitor to subscription of newsletter.

UserControl is withing the update-panel and is added to the main master-page.

Problem with the control is that Subscribe button is not firing for some reason

User control markup:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>    
    <table cellpadding="0" cellspacing="0" class="PrayerTimeWrapper">
        <tr>
            <td align="center">
                <table cellpadding="0" cellspacing="0" class="PrayerTimeInnerWrapper" border="0">
                    <tr>
                        <td valign="top">
                            <div class="dHeading"><asp:Label ID="lblTitle" runat="server" Text="JOIN US"></asp:Label></div>
                            <div class="dName">
                                <asp:TextBox ID="txtName" CssClass="txtSubscribe" runat="server" Text="NAME" onfocus="if(this.value=='NAME')this.value='';" onblur="if(this.value=='')this.value='NAME';"></asp:TextBox>
                            </div>
                            <div class="dEmail">
                                <asp:TextBox ID="txtEmail" CssClass="txtSubscribe" runat="server" Text="YOUR EMAIL" onfocus="if(this.value=='YOUR EMAIL')this.value='';" onblur="if(this.value=='')this.value='YOUR EMAIL';"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="rfvEmailSub"  runat="server" ErrorMessage="*" 
                                    ControlToValidate="txtEmail" ValidationGroup="SubEmail" ></asp:RequiredFieldValidator>
                                <asp:RegularExpressionValidator ID="revEmailSub" runat="server" 
                                    ErrorMessage="*" ControlToValidate="txtEmail" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
                                    ValidationGroup="SubEmail" ></asp:RegularExpressionValidator>
                            </div>
                            <div class="dSubmit">
                                <asp:Button ID="btnSubscribe" CssClass="btnSubscribe" runat="server" Text="Subscribe" onclick="btnSubscribe_Click" />
                            </div>   
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>    
    </ContentTemplate>
</asp:UpdatePanel>

User control code-behind:

protected void btnSubscribe_Click(object sender, EventArgs e)
{
    Response.Write("Test");
}

Markup of the page which is using master-page:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="PrayerTiming.aspx.cs" Inherits="PrayerTiming" %>
<%@ Register Src="~/en/UserControls/ucSubscribe.ascx" TagName="Subscribe"  TagPrefix="uc"%>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />    
    <div align="center" id="table"></div>    
    <uc:Subscribe id="ucSB" runat="server" UpdateMode="Conditional" />    
</asp:Content>

I am doing something wrong somewhere but i am not sure what. I would appreciate help on this.

Upvotes: 0

Views: 1190

Answers (3)

anouar.bagari
anouar.bagari

Reputation: 2104

Using Resonse.Write during an asynch resquest can altere the data used to update proprely the controls within the update panel.

so instead of Response.Write("Test") use a Label.Text = "Test"

Upvotes: 1

Adrian Iftode
Adrian Iftode

Reputation: 15663

Set the ValidationGroup for the btnSubscribe button also

<asp:Button ID="btnSubscribe" 
      CssClass="btnSubscribe" runat="server" 
      Text="Subscribe" 
      onclick="btnSubscribe_Click" 
       ValidationGroup="SubEmail" />

UPDATE

From what I've seen in the comments and in the other answers, the only reason why the button didn't post the content to the server is because it didn't subscribe to that validation group. The ValidationGroup is used to separate certain views (group of controls) in a page so they use their own validation. For example a forgot password section and a login section would have two different validation groups so when a certain button is clicked only its section is validated.

I did this update, because I truly think that the accepted answer is more a debuging advice than an actually answer. A future SO reader might jump to use this guideline instead of seeing the problem.

Upvotes: 1

Dejan Stuparic
Dejan Stuparic

Reputation: 595

Try puting UpdatePanel in form tag with runat="server"...

Upvotes: 0

Related Questions