用户控件内下拉控件的RequiredFieldValidator不会触发

用户控件内下拉控件的RequiredFieldValidator不会触发

问题描述:

以下是我的代码的测试场景。 1)一旦用户选择Webpage.aspx上的一个单选按钮,就会显示一个模式弹出式扩展器。 2)用户控件(SSL_Ticket.ascx)在模态弹出窗口中定义。 3)RequiredFieldValidator是为用户控件内包含的下拉列表定义的。 4)如果用户从下拉列表中选择“0”值,则不显示验证错误消息。用户控件内下拉控件的RequiredFieldValidator不会触发

代码

Webpage.aspx

     <asp:RadioButtonList ID="RadioButtonListForTicket" runat="server" AutoPostBack="true" 
         OnSelectedIndexChanged="radioButtonListForTicket_OnSelectedIndexChanged"> 
          <asp:ListItem Selected="True">No</asp:ListItem> 
          <asp:ListItem>Yes</asp:ListItem> 
         </asp:RadioButtonList> 
         <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtenderForTicket" runat="server" BackgroundCssClass="popUpStyle" 
          DropShadow="true" PopupControlID="divTicketPreview" PopupDragHandleControlID="panelDragHandle" 
          TargetControlID="btnForPopupAppear" CancelControlID="btnForPopupDisappear"/> 

....
...

Webpage.aspx.cs

protected void radioButtonListForTicket_OnSelectedIndexChanged(object sender, System.EventArgs e) 
{ 
    if (RadioButtonListForTicket.SelectedItem.Text.ToString().Equals("Yes")) 
    { 

     // Check if the sites are selected 
     updateSelectionCount(); 
     updateListOfSites(); 

     if (selectionCount == 0) 
     { 
      lblSSLTicketSelection.Text = "Please select a site."; 
      RadioButtonListForTicket.SelectedValue = "No"; 
      return; 
     } 
     else 
     { 
      lblSSLTicketSelection.Text = ""; 
     } 

     .... 

     ModalPopupExtenderForTicket.Show(); 
    } 
} 

...

SSL_Ticket.ascx

  <asp:DropDownList ID="cmbRootCause" runat="server" Width="255px" OnSelectedIndexChanged="cmbRootCause_SelectedIndexChanged" AutoPostBack="true" 
       CausesValidation="true"> 
       <asp:ListItem Value="0">Select</asp:ListItem> 
       <asp:ListItem Value="1">Item1</asp:ListItem> 
      </asp:DropDownList> 
      <asp:RequiredFieldValidator ID="reqdFieldForRootCause" runat="server" ControlToValidate="cmbRootCause" InitialValue="Select" 
       ErrorMessage="Please select root cause" ValidationGroup="validateRootCause" Visible="false" Display="Dynamic" EnableClientScript="true"> 
      </asp:RequiredFieldValidator> 

...

SSL_Ticket.ascx.cs

protected void cmbRootCause_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (cmbRootCause.SelectedItem.ToString().Equals("Other")) 
     { 
      lblcmbRootCause.Text = ""; 
      lblcmbRootCause.Visible = false; 
      txtRootCauseOther.Visible = true; 
     } 
     else if (cmbRootCause.SelectedItem.ToString().Equals("Select")) 
     { 
      lblcmbRootCause.Visible = true; 
      lblcmbRootCause.Text = "Please select root cause"; 
     } 
     else 
     { 
      lblcmbRootCause.Text = ""; 
      lblcmbRootCause.Visible = false; 
      txtRootCauseOther.Visible = false; 
     } 
    } 

我确实浏览了几个解决方案(Validat eProperty,客户端验证,RangeValidation等),但它没有激发验证文本。

这并没有帮助 - Handling RequiredFieldValidator inside of a User Control

我会感谢您的帮助很大。

谢谢!

从必填字段验证程序中删除visible = false属性,默认情况下它们不会在开始时显示。

<asp:RequiredFieldValidator ID="reqdFieldForRootCause" runat="server" ControlToValidate="cmbRootCause" InitialValue="Select" 
       ErrorMessage="Please select root cause" ValidationGroup="validateRootCause" **Visible="false"** Display="Dynamic" EnableClientScript="true"> 
      </asp:RequiredFieldValidator> 
+0

感谢提供解决方案。仅当我先选择有效的根本原因然后从DDL中选择“选择”选项时,它才会显示错误消息。如果我将根本原因保留为“选择”(默认为选中),则不会显示错误消息。我打算实施从JavaScript验证焦点变化的验证。任何指针? – 2013-03-06 00:11:36

+0

请再提一个问题 - 我不确定上面代码中显示的RequiredFieldValidator是否是服务器端验证或客户端验证。请告诉我。 – 2013-03-06 00:48:03

+0

他们执行客户端和服务器端验证。 – Sunny 2013-03-06 02:08:58

好你的 'RequiredFieldValidator的' 为您DropDownList您需要删除此:

InitialValue="Select" 
+0

感谢您的回复。但是基于搜索在线解决方案,他们建议添加InitialValue以指示何时应该触发验证的点,即,当时用户从DDL中选择第一个/默认项目。 – 2013-03-05 18:26:08

+0

@ user2136390没有必要。它通常用于避免在下拉列表中为缺省值调用。例如: - 选择 - 如果您发现我的输入有用,请将其标记为已回答。 – 2013-03-05 18:27:49

+0

谢谢。从Validator中删除“InitialValue”后,仍然不会触发验证。如果我从下拉列表中选择“选择”,则不会显示错误消息“请选择一个根本原因”。 ANY指针? – 2013-03-05 23:49:55