如何从外部JavaScript中的ServerControl访问ClientID

时间:2011-10-24 13:56:30

标签: javascript asp.net controls external clientid

目前,如果我在SharePoint项目中使用JavaScript,我会将代码添加到{。{1}}块中的* .ascx文件中,并为每个元素创建<script type="text/javascript"></script>的变量。

例如:

ClientID

现在我想在我的项目中添加一个外部JavaScript并在那里插入代码。 但是我如何才能访问var test = '<%= TextBox1.ClientID %>'; ?在外部JavaScript中,我无法使用ClientID。我发现了这个:referencing server controls in external file但我不明白,这应该如何运作。如果有人可以解释我,如何访问ID,那将是非常棒的。

顺便说一下,为什么:

<%= TextBox1.ClientID %>

不起作用,不会显示任何消息?

格尔茨

修改1:

好的,我可以在外部脚本中使用textBox1吗? 我是这样做的,这是在我的* .ascx文件中:

<script type="text/javascript">
    var ClientIDs = {
        test1   : '<%= TextBox1.ClientID %>',
        test2   : '<%= TextBox2.ClientID %>'
        }

    function SetButtonStatus() {    
            alert($(ClientIDs.test1).value);
        }
</script>

在我的外部脚本中,我只有一个测试它的功能:

<script type="text/javascript">
    var ClientIDs = {
        textBox1:    '<%= textBox1.ClientID %>',
        textBox2:    '<%= textBox2.ClientID %>'
    }
</script>

我还用function test () { alert($(ClientIDs.textBox1).val(); } 测试了它。每次执行test()时,都会出现以下错误:

"#" +

编辑2: 我错过了警报中的"document.getElementById(...)" is null or not an object 。但现在我收到一条消息,说明变量没有定义。 如果我使用:)我只获取文本而不是我的控件的ID。

编辑3: 目前我使用:

$('#' + ClientIDs.SumbitSearch).val()

在我的* .ascx文件中,它有效。我不喜欢这种方式......它在外部JS中不起作用,引用不起作用。如果有人有其他想法,可以使用.net 3.5,如果他让我知道,那就太好了。

4 个答案:

答案 0 :(得分:2)

要解释并简化您要链接的问题,他们所做的只是从页面/服务器控件设置JavaScript变量,并从外部JavaScript文件中读取该变量。

例如,您的* .ascx文件将包含此JavaScript:

var textBox1 = '<%= TextBox1.ClientID %>';

然后,您的外部JavaScript文件只能引用变量textBox1

现在,还有其他方法可以实现这一目标。如果您使用的是ASP.NET 4,则可以使用新属性ClientIDMode来阻止ASP.NET更改您的ID。如果你没有使用ASP.NET 4,也可以简单地将CSS类添加到你想要选择的元素,只需更改你的jQuery选择器以使用一个类(虽然比使用ID略慢)。

最后,在为元素id评估jQuery选择器时,您需要使用#,这样就可以了:

alert($('#' + ClientIDs.test1).val());

答案 1 :(得分:1)

在ASP页面中:

<script>
    var test2 = '<%= TextBox2.ClientID %>'
</script> 

以这种方式在外部JavaScript访问TextBox2中:

documnet.getelementByid(test2);

答案 2 :(得分:0)

我从来没有找到过我喜欢的解决方案,但我已经实施了一些不是完全可怕的解决办法:

  • 对于必须引用特定页面元素的JS代码,请在.aspx文件中定义它,以便您可以访问&lt;%= btnFoo.ClientID%&gt;。这些函数可以在.js文件中调用常见的繁重函数。
  • 在.aspx文件中定义javascript变量以保存ClientID值。 .js文件中的函数可以引用这些变量来获取客户端ID。当然,这些函数只能在定义预期变量的页面上正常工作。

也许其他SO'ers会有更优雅的解决方案来解决这个问题 - 我期待看到其他的回应。

答案 3 :(得分:0)

使用explicity全局参数。

window.clientId ='&lt;%= TextBox1.ClientID%&gt;';

这意味着你有gloabal变量“cilentId”。然后你可以在任何地方使用它。