2012-03-01 52 views
2

我有以下ModalPopupExtender,它包含一個AJAX組合框,RequiredFieldValidator和ValidatorCalloutExtender。 ModalPopup之外,這確切代碼的作品。此外,ModalPopup中的ValidatorCalloutExtender在其他控件(如TextBoxes)上工作。但以下方法無效。值'0'(默認值)可以選擇,驗證器不顯示。UpdatePanel中的AJAX組合框上的RequiredFieldValidator的ValidatorCalloutExtender不顯示

然而,如果我拿出AJAX組合框,放在一個傳統的ASP.NET的DropDownList相反,它的工作原理預期並顯示ValidatorCalloutExtender。我使用了開發人員工具欄,不能從任何東西中看到任何東西。

我需要做些什麼來使ValidatorCalloutExtender與ModalPopup中的AJAX組合框一起工作?

謝謝!

不工作:

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

作品(如果我替換代碼中的AJAX ComboBox控件上面用一般傳統ASP.NET的DropDownList):

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

回答

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