3

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

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

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

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

4

3 回答 3

1

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

在用户控制中

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

在其他页面/控件中

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

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

于 2009-05-26T14:41:27.120 回答
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 页面分开,并将所有服务器控件依赖项放在一个标记中。

于 2009-06-10T10:29:37.210 回答
0

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

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

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

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

于 2009-06-04T13:05:58.733 回答