【问题标题】:ASP.NET Scope of user control for javascript functionsASP.NET javascript 函数的用户控制范围
【发布时间】:2012-07-04 05:00:38
【问题描述】:

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

【问题讨论】:

    标签: c# javascript asp.net user-controls


    【解决方案1】:

    一种可能的解决方案是:

    function <%= ClientID %>javaFunction()
    {
      //code here
    }
    

    您将拥有每个用户控件的函数声明,其中包含控件的客户端 ID 和函数名称

    【讨论】:

    • 这基本上是我一直在做的。我希望 Microsoft 的人能够让您引用用户控件的个性,而不是这样称呼它。
    • 它会工作,但它真的很丑陋的解决方案。这里提到了解决该问题的更好方法:stackoverflow.com/questions/4416705/…
    • @Jakub Szułakiewicz 对此表示感谢。顺便说一句,如果你真的需要更好的解决方案,你应该停止使用网络表单:) 这个答案已经 4 岁了
    【解决方案2】:

    通常您可以拥有一个功能并让它在整个页面上执行它的工作,或者您可以将其更改为采用参数(对您感兴趣的用户控件的引用)

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

    所以不是

    function CLIENTID_javascriptFunction{
    }
    

    您将在全球范围内发挥作用:

    function javascriptFunction(id){
    
    }
    

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

    【讨论】:

    • 是的,你是对的,但有时我不得不去 (CLIENTID_javascriptFunction) 而不是将大量参数传递给全局声明的函数
    【解决方案3】:

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

    这是一个讨论差异的链接。 http://www.hotscripts.com/forums/asp-net/31174-difference-between-user-control-custom-server-controls.html

    【讨论】:

    猜你喜欢
    • 2011-05-23
    • 2016-09-30
    • 2011-11-15
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2015-11-22
    相关资源
    最近更新 更多