为什么在ASP中没有我的CustomValidator ?NET 4.0工作

本文关键字:NET 工作 CustomValidator 我的 ASP 为什么 | 更新日期: 2023-09-27 17:50:45

<asp:TextBox ID="txtEnd" runat="server" placeholder="12:59"></asp:TextBox>
<asp:RadioButtonList ID="rblTime2" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow">
    <asp:ListItem>AM</asp:ListItem>
    <asp:ListItem>PM</asp:ListItem>
</asp:RadioButtonList>

CustomValidator

<asp:CustomValidator ID="ValidateStartTime" ControlToValidate="txtEnd" OnServerValidate="ValidateStartTimeFun" runat="server" ErrorMessage="*required"></asp:CustomValidator>
后台代码

protected void ValidateStartTimeFun(object source, ServerValidateEventArgs args)
{
    try
    {   if (txtStart.Text != "" && rblTime.SelectedValue != null )
        { args.IsValid = true; }}
    catch (Exception ex)
        { args.IsValid = false; }
}

如果我把整个CodeBehind改成这个,它甚至不会给我一个*;

protected void ValidateStartTimeFun(object source, ServerValidateEventArgs args)
{
    args.isValid = false;
}

为什么在ASP中没有我的CustomValidator ?NET 4.0工作

如果您正在验证空输入,如果您设置ControlToValidate属性并且不将ValidateEmptyText属性设置为true,则自定义验证器不会触发,否则框架期望您使用RequiredFieldValidator

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.validateemptytext.aspx

如果您设置了ControlToValidate属性,则如果用户不输入/选择任何内容,CustomValidator将不会触发。但如果你忽略它,它会在表单提交时触发。

所以把它去掉

<asp:CustomValidator ID="ValidateEndTime" 
    OnServerValidate="ValidateEndTimeFun" 
    runat="server" ErrorMessage="*required">
</asp:CustomValidator>

由于您正在验证多个控件,我将这样做,否则您也可以将ValidateEmptyText属性设置为true,如gfyans所提到的。

我认为ValidationGroup元素缺失了。

您应该为验证器和按钮设置相同的ValidationGroup值(或者使用Page的Validate方法以编程方式检查它),它必须检查值

我已经很长时间没有使用更新面板了,因为这也是我从Sarawut Positwinyu找到的答案:

Custom Validator, when placing in formview will not show its error message after
server-side validation (though it has been validated and result is invalid) the 
mean to fix this in to wrap it by a Update Panel. 

我还记得总是在validationgroup="组的名称"中输入所有被验证的控件,并在自定义验证器中将validateemptytext设置为true。

答案参考

为什么不对不同的控件使用不同的验证器呢?并且还可以在服务器中工作自定义验证器,只需从标记中丢弃ControlToValidate属性。并检查后面代码中使用的条件