【问题标题】:AJAX & ASP.net, Referencing server controls in external fileAJAX 和 ASP.net,在外部文件中引用服务器控件
【发布时间】:2010-10-29 00:05:22
【问题描述】:

我在 ASP.NET 页面中有一些 JavaScript,如下所示:

var list = $get('<%=Topics.ClientID %>');

我现在编写了许多使用这种语法的函数,我想集中我的 JavaScript 并将其移动到外部 JavaScript 文件中。但是,这会中断,因为找不到“主题”。

实现此功能的最佳策略是什么?我假设我应该将控制/控制信息作为参数传递给函数,但我似乎无法让语法正常工作。有什么建议吗?

【问题讨论】:

    标签: javascript ajax asp.net-ajax parameters clientid


    【解决方案1】:

    这是 ASP.NET JS 开发的常见问题。至于我,我每次都使用相同的方法,看起来不错。

    我习惯了 Javascript 中的 OOP,所以我的大多数 JS 外部文件看起来像:

    function CouponManager()
    {
    }
    

    在 .aspx 代码中我会这样做:

    <script language="javascript">
        var couponManager = new CouponManager();
    </script>
    

    如果我需要传递一些参数,我将类的声明更改为:

    function CouponManager(params)
    {
        // .. stuff here
    
        this.initialize = function(initParams)
        {
           // .. accessing initParams variable for server control IDs
        };
    
        this.initialize(params);
    }
    

    从 .aspx 代码中,我执行以下操作:

    <script language="javascript">
        var couponManager = new CouponManager
        ({
            txtCouponNameId = '<%= txtCouponName.ClientID %>',
            txtCouponDescriptionId = '<%= txtCouponDescription.ClientID %>'
        });
    </script>
    

    这种方法允许我将 JS 与 .aspx 页面分开,并将所有服务器控件依赖项放在一个标记中。

    【讨论】:

      【解决方案2】:

      您应该从返回客户端元素的 usercontol 内部创建一个 javascript 方法。然后在您的其他页面/控件中,只需访问该方法

      在用户控制中

       <script language="javascript">
           function GetTopics() {
                return = $get('<%=Topics.ClientID %>');
           } 
       </script>
      

      在其他页面/控件中

       <script language="javascript">
           var list = GetTopics();
       </script>
      

      编辑 - 您面临的问题是您需要 Topics.ClientID 不存在的地方。因此,弥合这一差距的唯一真正方法是将其放在一个共同的地方。如果您真的不想这样做,您可以尝试通过其他一些标准来选择您的元素。如果你使用 jQuery,你可以用一个 Topics 类标记一个元素,然后用 $(".Topics") 找到它。

      【讨论】:

      • 对不起,我没有更具体。我希望将 JavaScript 集中到外部 JavaScript 文件而不是用户控件中。我已经更新了问题。
      • 我不认为你将能够完成你所追求的。您可以通过在基本用户控件类中的按钮来自动化我发布的解决方案。
      • 澄清一下,您还可以在外部 javascript 文件中使用 GetTopics 方法。如果上述方法不起作用,您可以将其作为 window.GetTopics = GetTopics; 扔到窗口对象上
      【解决方案3】:

      如果您知道每个页面只有一个名为“Topics”的服务器控件,并且您使用命名约定,您可以从任何控件 Topics 继承(也许它是一个 HiddenField?您没有指定)并覆盖其 ClientId getter 像这样返回其服务器 ID:

      http://andreascode.wordpress.com/2009/04/27/tiny-drips-of-aspnet-juice/

      然后您可以在您的 javascript 文件中知道页面中将有一个隐藏字段,其 id 设置为“主题”并直接使用它。

      根据您的领域/情况,这可以为您节省大量时间,也可以让您花很多时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        • 2010-11-14
        • 1970-01-01
        • 2010-10-10
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多