我有一个奇怪的问题,我的网页上的4个自定义验证器之一没有触发。根据工作验证器,一切看起来都是正确的。以下是简化代码。
ASPX代码 -
<asp:TextBox ID="CMT_TXT" runat="server" Columns="60" Rows="8"
TextMode="MultiLine" Text='<%#Eval("CMT_TXT")%>'></asp:TextBox><br />
<asp:CustomValidator ID="csvCMT_TXT" runat="server" ControlToValidate="CMT_TXT"
Display="Dynamic" EnableClientScript="False" ErrorMessage="Msg">
</asp:CustomValidator>
VB代码 -
Public Sub csvCMT_TXT_ServerValidate(source As Object,
args As ServerValidateEventArgs) _
Handles csvCMT_TXT.ServerValidate
dim s As String = CMT_TXT.Text
args.IsValid = s.Length <= 3500
End Sub
测试时,
答案 0 :(得分:1)
要启动服务器端验证,您需要调用Page.Validate,这应该触发所有服务器端验证并更新Page.IsValid
此外,您似乎没有在自定义val上设置事件。可能想要添加prop OnServerValidate
OnServerValidate="csvCMT_TXT_ServerValidate"
<asp:CustomValidator ID="csvCMT_TXT" runat="server" ControlToValidate="CMT_TXT"
Display="Dynamic" EnableClientScript="False" ErrorMessage="Msg" OnServerValidate="csvCMT_TXT_ServerValidate">
</asp:CustomValidator>
答案 1 :(得分:0)
我对VB.NET不太熟悉,但在使用C#之后,我会检查Page.IsValid
字段,然后再继续使用CustomValidator
的页面。
在最后阶段,Wizard
控件包含CustomValidator
的示例,我将在FinishButtonClick
事件中检查此值。
protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
if (Page.IsValid == false)
{
// validator failed, stop wizard from continuing
return;
}
// page is valid, continue on
// ...
}
不确定VB.NET是否存在任何差异,但可能值得一试
答案 2 :(得分:0)
乍一看,您似乎错误地命名了您的处理程序。控制ID为csvCMT_TXT
,而处理程序为csv_CMT_TXT.ServerValidate
。处理程序中有一个额外的_
。
答案 3 :(得分:0)
问题证明是VS2010项目构建的一个问题。
对此问题,我不得不
这有点极端,但这是解决问题的方法。