Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# javascript函数的ASP.NET用户控件范围_C#_Javascript_Asp.net_User Controls - Fatal编程技术网

C# javascript函数的ASP.NET用户控件范围

C# javascript函数的ASP.NET用户控件范围,c#,javascript,asp.net,user-controls,C#,Javascript,Asp.net,User Controls,因此,我有一个用户控件,它在一个页面上存在多次。从后端我可以调用userControl1.someFunction();并指定要为哪个用户控件调用someFunction()。但是如果在用户控件的前端有一个java脚本函数,我就不能为单个用户控件调用它。我所要做的就是调用javaFunction(),但这并没有指定要调用哪个用户控件。这就是我希望能够做到的,clientsideUserControl1.javaFunction();这可能吗?我一直在做的是动态生成函数名,即:clientside

因此,我有一个用户控件,它在一个页面上存在多次。从后端我可以调用userControl1.someFunction();并指定要为哪个用户控件调用someFunction()。但是如果在用户控件的前端有一个java脚本函数,我就不能为单个用户控件调用它。我所要做的就是调用javaFunction(),但这并没有指定要调用哪个用户控件。这就是我希望能够做到的,clientsideUserControl1.javaFunction();这可能吗?我一直在做的是动态生成函数名,即:clientsideUserControl1_javaFunction(),但我觉得必须有更好的方法来实现这一点。

一个可能的解决方案是:

function <%= ClientID %>javaFunction()
{
  //code here
}
function javaFunction()
{
//代码在这里
}

每个用户控件都有一个函数声明,其中客户端ID为控件加函数名。通常,您可以有一个函数,让它在整个页面上执行它的工作,或者您可以将其更改为一个参数(对您感兴趣的用户控件的引用)

这样,您就不需要拥有同一javascript函数的多个副本

所以不是

function CLIENTID_javascriptFunction{
}
在全球层面上,您将拥有以下功能:

function javascriptFunction(id){

}

并使用您感兴趣的dom对象的id调用它。(使用ClientID获取控件的DOM id)

结果表明,在这种情况下,最好使用服务器控件而不是用户控件。服务器控件的制作似乎有点复杂,但它们确实保护了javascript函数的范围

下面是一个讨论差异的链接。

是的,没错,但有时我不得不使用(CLIENTID_javascriptFunction)而不是将大量参数传递给全局声明函数这基本上就是我一直在做的事情。我希望微软的人能让你参考用户控件的个性,而不是这样称呼它。这会管用的,但它的解决方案真的很难看。这里提到了解决这个问题的更好方法:@Jakub Szułakiewicz,谢谢你。顺便说一句,如果你真的需要更好的解决方案,你应该停止使用web表单:)这个答案是4年前的如果你确实想使用用户控件,这似乎是一个保护范围的好方法->