0

我有一个用户控件,其中包含一系列单选按钮和一些文本字段。如果选中了特定的单选按钮,我想验证两个文本字段的内容。

我的控件标记包含以下内容:

<asp:TextBox ID="FromDate" runat="server" Columns="8"></asp:TextBox>
<asp:TextBox ID="ToDate" runat="server" Columns="8"></asp:TextBox>
<asp:RadioButton runat="Server" ID="RadioBetween" GroupName="Date" CssClass="date_group_options_control_radio"/>
<asp:CustomValidator ID="DateValidator" runat="server" Display="Dynamic" ClientValidationFunction="ValidateDateFields_Client" OnServerValidate="ValidateDateFields"></asp:CustomValidator>

<script type="text/javascript">
function ValidateDateFields_Client(source, args)
{
    debugger;
    var bRadioBetweenSelected = false;

    var oRadio = document.getElementById('<%=RadioBetween.ClientID%>');
    if (oRadio != null && (oRadio.checked == true || oRadio["checked"] == true))
    {
        bRadioBetweenSelected = true;
    }

    if (bRadioBetweenSelected)
    {
        var oFromDate = document.getElementById('<%=FromDate.ClientID%>');
        var oToDate = document.getElementById('<%=ToDate.ClientID%>');

        if (oFromDate != null && oToDate != null)
        {
            var sFromDate = oFromDate.value;
            var sToDate = oToDate.value;

            source.innerHTML = ValidateFromToDate(sFromDate, sToDate, args);
        }
        else
        {
            args.IsValid = true;
        }
    }
    else
    {
        args.IsValid = true;
    }
}
</script>

ValidateFromToDate 只是检查值并确保它们是理智的。

但它永远不会进入检查,因为我似乎无法判断 RadioBetween 是否被检查。但是,服务器端代码工作正常(完全相同)。

如果我在控件中手动将 Checked 设置为“true”,它会按预期工作。

如何验证此客户端以节省前往服务器的行程?我究竟做错了什么?这应该是相当简单的代码:-)

4

4 回答 4

0

目前尚不清楚您为什么使用 RadioButton。通常有多个具有相同 GroupName 的 RadioButton。也许您只需要一个复选框?

于 2010-11-23T15:34:28.893 回答
0

您可以借助 FireBug 或其他 JavaScript 调试工具来定位问题。将断点放入您的函数中,并查看在每个执行步骤中将哪些值插入到变量中。

于 2010-11-23T15:46:04.310 回答
0

Javascript 获取或设置选中的单选值

于 2010-11-23T16:31:26.617 回答
0

原来这是因为我在一页中有两个版本的相同控件。隐藏的(在模态对话框的深处)与主要的冲突。在隐藏控件中的控件上调用客户端验证函数两次。

为什么这还有待观察,但是当注释掉控件的第二个实例时,它一切正常。

ASP.NET 每天都让我感到困惑 :-)

原因在这里讨论:User Control with Client + Server Side CustomValidation;选择了错误的客户端验证器

于 2010-11-23T19:53:08.760 回答