代码之家  ›  专栏  ›  技术社区  ›  fluf

ajax模式弹出扩展器的服务器端验证

  •  1
  • fluf  · 技术社区  · 15 年前

    我有一个程序,我使用一个模式弹出窗口,允许用户添加新的项目到一个数据库,这是工作正常,但我想添加一些验证。例如,由于重复条目而引发异常时。我看了几个关于如何使用asp.net自定义验证控件的示例。

    问题是,一旦验证事件触发,模式弹出窗口就会由于post back而消失。

    <asp:Panel ID="panComp" runat="server" Height="180px" Width="400px" cssclass="ModalWindow">   
            <table width="100%">
                     <tr> 
                          <td><asp:Label Text="Name" runat="server" /></td> <td><asp:TextBox ID="txtCompName" runat="server" />
                             <asp:CustomValidator ID="CustomValidator1" OnServerValidate="btnAddComp_Click" runat="server" ErrorMessage="Competency already exists" ControlToValidate="txtCompName" />
                             <cc1:ValidatorCalloutExtender  ID="ValidatorCalloutExtender1" runat="server" TargetControlID="CustomValidator1" />                                                               
                          </td>
                 </tr>   
            </table>
            <br />
            <asp:Button ID="btnAddComp" runat="server" Text="Add" />
            <asp:Button ID="btnCancel" runat="server" Text="Cancel" />
      </asp:Panel>
    

    事件按其应该的方式激发,modalPopupExtender OnOkScript没有值

    protected void btnAddComp_Click(object source, ServerValidateEventArgs args)
    {
        if (!String.IsNullOrEmpty(txtCompName.Text))
        {
            try
            {
                _ass.AddCompetency(txtCompName.Text);                
                args.IsValid = true;
            }
            catch (Exception)
            {
                args.IsValid = false;
            }
        }
    
    }
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   Brian Mains    15 年前

    这很棘手,因为您需要对自定义验证器进行回发。你能做的就是检查页面是否有效;如果出现错误,您可以通过在服务器或客户机上调用modal extender show方法来显示面板,以重新显示该面板的错误。

    否则,模式弹出窗口不会在回发中保持其打开状态。

    嗯。