UpdatePanel内部的AJAX ComboBox上的RequiredFieldValidator的ValidatorCalloutExtender未显示

时间:2012-03-01 03:30:09

标签: asp.net combobox ajaxcontroltoolkit modalpopupextender

我有以下ModalPopupExtender,它包含一个AJAX ComboBox,RequiredFieldValidator和ValidatorCalloutExtender。在ModalPopup之外,这个完全代码可以正常工作。此外,ModalPopup中的ValidatorCalloutExtender可以处理其他控件,如TextBoxes。但是以下不起作用。可以选择值“0”(默认值),并且不显示验证器。

然而如果我取出AJAX ComboBox并放入传统的ASP.NET DropDownList,它按预期工作并显示ValidatorCalloutExtender。我使用了开发人员工具栏,无法看到ordianry中的任何内容。

我需要做什么才能使ValidatorCalloutExtender与ModalPopup中的AJAX ComboBox一起使用?

谢谢!

不工作:

<asp:Panel ID="pnlData" runat="server" >
 <table>
  <tr>
    <td>
      <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
         <act:ComboBox ID="cbx1" runat="server" Width="278px" DropDownStyle="DropDownList" AutoCompleteMode="SuggestAppend" CaseSensitive="false" AppendDataBoundItems="true" ToolTip="Select the Name.">
           <asp:ListItem Text="(Please Select the Name)" Value="0" />
         </act:ComboBox>
        <asp:RequiredFieldValidator ID="cbx1Req" runat="server" ControlToValidate="cbx1"
          SetFocusOnError="true" ErrorMessage="Please Select the Name."
          InitialValue="0" Display="None" />
        <act:ValidatorCalloutExtender ID="cbx1ReqE" runat="server"
             TargetControlID="cbx1Req" PopupPosition="Right" />
       </ContentTemplate>
     <Triggers>
       <asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" />
      </Triggers>
    </asp:UpdatePanel>
   </td>
  </tr>
 </table>
</asp:Panel>

<act:ModalPopupExtender ID="DataMPE" runat="server"
  TargetControlID="="btnHidden"
  PopupControlID="pnlData" />

<asp:Button ID="btnHidden" runat="server" Text="Modal Display (Hidden)" style="display:none" />

Works(如果我用传统的ASP.NET DropDownList替换上面代码中的AJAX ComboBox控件):

<asp:DropDownList ID="cbx1" runat="server" Width="300px" AppendDataBoundItems="true">
    <asp:ListItem Text="(Please Select A Name)" Value="0" />
</asp:DropDownList>

1 个答案:

答案 0 :(得分:0)

不知道这是否有帮助,我在使用必需的验证器时遇到了这个问题。

如果在此处找到解决方案:http://ajaxcontroltoolkit.codeplex.com/workitem/24417

必须添加javascript才能更改内部文本框的controltovalidate属性。

string script = string.Format(@"if({0}) {0}.controltovalidate = ""{1}_TextBox"";", this.reqValidator.ClientID, this.ddlCombo.ClientID);

ScriptManager.RegisterStartupScript(this, this.GetType(), string.Format("validator trick for {0}", this.ClientID), script, true);