用户控制按钮不从webform页面触发

时间:2012-06-04 12:26:25

标签: c# asp.net .net user-controls updatepanel

我为访客订阅时事通讯创建了一个用户控件。

UserControl正在使用更新面板并添加到主主页面。

控件的问题是订阅按钮由于某种原因没有触发

用户控制标记:

<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>

用户控制代码隐藏:

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

使用母版页的页面标记:

<%@ 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>

我在某处做错了什么,但我不知道是什么。我很感激你的帮助。

3 个答案:

答案 0 :(得分:1)

为btnSubscribe按钮设置ValidationGroup

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

<强>更新

从我在评论和其他答案中看到的,按钮没有将内容发布到服务器的唯一原因是因为它没有订阅该验证组。 ValidationGroup用于分隔页面中的某些视图(控件组),以便它们使用自己的验证。例如,忘记密码部分和登录部分将具有两个不同的验证组,因此当单击某个按钮时,仅验证其部分。

我做了这个更新,因为我真的认为接受的答案更多是一个贬值的建议,而不是一个实际的答案。未来的SO读者可能会跳过使用本指南而不是看到问题。

答案 1 :(得分:1)

Resonse.Write期间使用asynch resquest可以更改用于更新更新面板中控件的数据。

所以代替Response.Write("Test")使用Label.Text = "Test"

答案 2 :(得分:0)

尝试将UpdatePanel标记formrunat="server" ...

放在一起