自定义验证器问题

时间:2012-11-10 06:32:56

标签: asp.net

我试图在我的MasterPage中验证输入框的搜索引擎,我已经使用了custome validator,但它没有验证,而是带我去搜索结果。默认情况下,输入框的值为“Name ...”,因此在搜索时单击它会搜索“Name ...”。

此外,我在联系我们页面上提交了按钮,当我点击按钮时发生了abve验证,这与上述搜索功能无关。我的代码是参考: -

<script>
function nameNull(oSrc, args) {
            if (name.Value.Trim() == "Name..." || name.Value.Trim() == "") {
                args.IsValid = false;
            }
            else {
                args.IsValid = true;
            }
        }
</script>

<input type="text" id="name" runat="server" value="Name..." name="name" onblur="doDefault(this)" onfocus="doClear(this)" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Please enter  name"
ControlToValidate="name" ClientValidationFunction="nameNull"
ForeColor="#FF3300" Font-Bold="True"></asp:CustomValidator>

2 个答案:

答案 0 :(得分:1)

首先,您尝试按ID访问HTML元素。要获取元素,您需要使用document.getElementById JS方法。

然后使用runat =“server”属性标记输入字段。这将导致ASP.NET将呈现与您在ASP.NET标记中指定的ID不同的ClientID。因此,要访问您的元素,您需要使用服务器控件的ClientID值:

<script type="text/javascript">
    function nameNull(oSrc, args) {
        var element = document.getElementById('<%= this.name.ClientID %>');
        var value = element.value.trim();

        if (value == "Name...") {
            args.IsValid = false;
        }
        else {
            args.IsValid = true;
        }
    }
</script>

如您所见,第二点是JavaScript区分大小写,您需要使用 value.trim();

最后一个:要检查该元素是否至少有价值,最好使用必需的字段验证器。因此,您的标记应修改为:

<input type="text" id="name" runat="server" value="Name..." name="name" />
<asp:RequiredFieldValidator ID="NameFieldRequiredFieldValidator" ErrorMessage="Please enter  name" ControlToValidate="name" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Please enter  name" ControlToValidate="name" ClientValidationFunction="nameNull"
    ForeColor="#FF3300" Font-Bold="True"></asp:CustomValidator>

答案 1 :(得分:0)

不应使用name.Value,而应使用getElementsbyname [“name”] / getElementsbyId [“name”]。这将有效.....