2

ASP.NET 中的控件

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

自定义验证器

<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 更改为此,它甚至不会给我一个 *required;

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

5 回答 5

2

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

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

于 2013-01-03T15:46:23.687 回答
0

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

所以删除它。

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

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

于 2013-01-03T15:48:10.657 回答
0

我认为缺少ValidationGroup元素。

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

于 2013-01-03T15:51:54.750 回答
0

我已经很久没有在没有更新面板的情况下使用它了,因为这也是我在 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="name of the group",并将自定义验证器的validateemptytext 设置为true。

答案参考

于 2013-01-03T15:53:28.633 回答
0

为什么不对不同的控件使用不同的验证器?并且要在服务器中使用自定义验证器,只需丢弃标签中的 ControlToValidate 属性。并检查您在后面的代码中使用的条件。

于 2013-01-03T16:27:21.400 回答