我有一个程序,我使用模式弹出窗口,允许用户将新项目添加到数据库,这工作正常,但我想添加一些验证。例如,由于重复条目而引发异常时。我已经看了几个关于如何使用asp.net自定义验证控件的例子。
问题在于,一旦验证事件触发,模式弹出窗口就会因回发而消失。
<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;
}
}
}
答案 0 :(得分:2)
这很棘手,因为你需要为自定义验证器进行回发。你可以做的是检查页面是否有效;如果存在错误,您可以通过在服务器或客户端上调用模态扩展器Show方法来显示该面板,以重新显示错误。
否则,模态弹出窗口不会在回发中保持其打开状态。
HTH。