asp.net jscript错误:无法获取未定义或空引用的属性“值”

时间:2013-09-10 21:15:14

标签: c# asp.net

在使用jscript

练习时开始学习并遇到此问题

代码:

<script type="text/jscript" language="jscript">
    function MyClientFunction(sender, arguments) {
        var intValue = arguments.value;
        alert(arguments.value);
        if (intValue % 2 == 0) {
            arguments.IsValue = true;
        }
        else {
            alert("Use Even Numbers");
        }
    }
</script>

<asp:textbox ID="TextBox1" runat="server"></asp:textbox>
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="CustomValidator" ClientValidationFunction="MyClientFunction();" EnableClientScript="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>

点击“按钮”后显示错误:

“......错误:无法获取未定义或空引用的属性'值'”

我不确定如何传递参数,并不熟悉jscript函数的工作方式

尝试了这个,没有错误:

var intValue = document.getElementById("TextBox1").value;
alert(intValue);

非常感谢..

4 个答案:

答案 0 :(得分:2)

不要通过this。你不想传递任何东西,你只想给它你的功能名称,其余的将为你处理:

ClientValidationFunction="MyClientFunction" 

请参阅this page上的示例。

还要确保使用正确的大小写。它应该是arguments.Valuearguments.IsValid

答案 1 :(得分:1)

你有几个问题。这是固定版本

<script>
    function MyClientFunction(sender, args) {
        var intValue = args.Value;
        alert(args.Value);
        if (intValue % 2 == 0) {
            args.IsValid = true;
        }
        else {
            args.IsValid = false;
        }
    }
</script>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" 
    ControlToValidate="TextBox1" ErrorMessage="Use Even Numbers" 
    ClientValidationFunction="MyClientFunction" EnableClientScript="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>

事情清单

  • 在验证程序上添加ControlToValidate属性,将值设置为 您希望其验证的控件的ID - TextBox1 情况下

  • ClientValidationFunction的值应该只是a的名称 javascript函数,而不是实际调用它

  • 该函数有两个你有权的参数。我不能 找到参数属性的定义。第二 参数具有Value(带有大写字母V),这是文本框输入 现在您已正确关联控件。

  • 在方法

  • 中设置IsValid为true或false
  • 将错误消息移至验证器属性而不是使用 警报

另外我将arguments更改为args,因为前者是javascript中的默认名称。

答案 2 :(得分:0)

调用客户端功能时,您没有传递任何参数 因此,它声明的两个参数都是undefined

当您在内联事件处理程序中调用它时,您可能希望将this作为参数传递。

答案 3 :(得分:0)

原因是JavaScript是一种区分大小写的语言。 以下代码应该有效:

<script type="text/jscript" language="jscript">
    function MyClientFunction(sender, arguments) {
        var intValue = arguments.Value;
        alert(arguments.Value);
        if (intValue % 2 == 0) {
            arguments.IsValue = true;
        }
        else {
            alert("Use Even Numbers");
        }
    }
</script>

解释是参数是一个参数对象,它有两个你知道的属性(Value和IsValid),你引用的是带有小写“v”的属性“Value”。

您还需要将属性ControlToValidate添加到CustomValidator:

ControlToValidate="TextBox1"

CustomValidator的公共ClientValidationFunction属性只是期望对您的函数有效的全名引用,您可以只使用“MyClientFunction”而不使用函数调用“();”。此外,所有ASP.net验证器都有一个名为ValidationGroup的公共属性,如果您有多个验证区域,它只是一个非常方便的标签。