【问题标题】:User Control button not firing from webform page用户控制按钮未从 Web 表单页面触发
【发布时间】:2012-06-04 12:26:25
【问题描述】:

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

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>

我在某处做错了什么,但我不确定是什么。我将不胜感激。

【问题讨论】:

  • 按钮事件未触发...当我调试时
  • 当您点击订阅按钮时页面是否发布到服务器?
  • 只是为了好奇该网站的用途是什么?
  • 这是一个普通的网站,很少有网络表格和简单的新闻订阅.. 不多

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


【解决方案1】:

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

所以不要使用Response.Write("Test"),而是使用Label.Text = "Test"

【讨论】:

  • 我通过将 response.write 语句替换为运行良好的适当标签控件来做到这一点。感谢您的帮助。谢谢
  • @KnowledgeSeeker,你说你调试了这个,显然你没有因为跟踪例程回答你的问题。我想知道您删除 ValidationGroup="SubEmail" 后它是否仍然有效。
  • @Adrian lftode,当您指出验证组时,我认为这是唯一的问题。令我惊讶的是,最后我对使它工作的代码进行了一些更改,其中一项更改是删除了 response.write 语句。我仍然不清楚为什么当我尝试“Anouar204”提到的类似方式时它不起作用。无论如何,我感谢每个机构的帮助。甚至在我的问题解决之前,我什至给了你的回复。
  • @Adrian,如果我删除验证组 ValidationGroup="SubEmail",它将无法工作
【解决方案2】:

同时为 btnSubscribe 按钮设置 ValidationGroup

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

更新

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

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

【讨论】:

  • 虽然我得到了它,但即使在添加了验证组之后仍然没有任何事情发生。按钮事件未触发
  • @KnowledgeSeeker,Response.Write 的问题在于,当使用 UpdatePanel 时,无法正常工作,即非 AJAX 方式。通常情况下,您会在页面顶部看到书面文本,在任何其他 html 代码之前,但使用 AJAX 时,它不会像这样工作。我实际上不知道用 AJAX 将书面文本放在哪里,你可以用 Fiddler 看到它。
  • @KnowledgeSeeker:问题在于,当有人在异步请求期间使用Resonse.Write 时,他更改了用于更新控件状态的数据,而验证siderite.blogspot.com/2007/02/… 没有任何意义
【解决方案3】:

尝试将UpdatePanelrunat="server" 一起放入form 标记中...

【讨论】:

  • 我正在使用母版页,所以我无法将表单标签添加到用户控件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多