带有参数的 CustomValidator

CustomValidator with Parameters

我正在使用 CustomValidator 和 JavaScript 验证文本框,向其传递一些参数:

<asp:CustomValidator ID="CustomValidator1" runat="server" SetFocusOnError="true" Display="Dynamic" ValidateEmptyText="true" ControlToValidate="tbFirstName" ClientValidationFunction="CVH.createFunction(notEmpty, 'tbFirstName','tbFirstNameRequired')"></asp:CustomValidator>

这是我的JavaScript

var CVH = {
    createFunction: function (validationFunction, extParamOne, extParamTwo) {
        var originalFunction = validationFunction;
        var extOne = extParamOne;
        var extTwo = extParamTwo;

        return function (src, args) {
            return originalFunction(src, args, extOne, extTwo);
        }
    }
}
var CustomValidatorHelper = CVH;

function notEmpty(source, args, tbID, spID)
{
    var textBoxId = document.getElementById(tbID);
    var spanID = document.getElementById(spID);

    if (textBoxId.Value == null || textBoxId.Value == "") {
        textBoxId.IsValid = false;
        textBoxId.className = "form-control redBorder"
        spanID.className = "redText";
        alert(textBoxId.getAttribute('value'));
    }
    else {
        textBoxId.IsValid = true;
        textBoxId.className = "form-control"
        spanID.className = "";
        alert(textBoxId.getAttribute('value'));
    }
}

因此正确调用了 notEmpty,它正在接收 tbID 和 spID 的值。

问题是,当我在 TextBox 中输入数据并执行代码时,我仍然没有得到值。在 textBoxId.Value 中,即使框中有数据也是 NULL。

Texbox 设置为静态:

<asp:TextBox ID="tbFirstName" runat="server" class="form-control" autocomplete="name" MaxLength="20" ClientIDMode="Static" />

并且正确呈现: <input name="ctl00$MainContent$tbFirstName" type="text" maxlength="20" id="tbFirstName" class="form-control" autocomplete="name" />

关于为什么它不能读取 TextBox 中的数据有什么建议吗?

所以错误在于尝试直接检查文本框的值而不是使用 args:

function notEmpty(source, args, tbID, spID)
{
    var textBoxId = document.getElementById(tbID);
    var spanID = document.getElementById(spID);

    if (args.Value == "")
    {
        args.IsValid = false;
        textBoxId.IsValid = false;
        textBoxId.className = "form-control redBorder"
        spanID.className = "redText";
    }
    else
    {
        args.IsValid = true;
        textBoxId.IsValid = true;
        textBoxId.className = "form-control"
        spanID.className = "";
    }
}

因此代码仍然相同,只是将 textbox.value 更改为 args.value。