我在 ASP.NET 页面中有一些 JavaScript,如下所示:
var list = $get('<%=Topics.ClientID %>');
我现在编写了许多使用这种语法的函数,我想集中我的 JavaScript 并将其移动到外部 JavaScript 文件中。但是,这会中断,因为找不到“主题”。
让它发挥作用的最佳策略是什么?我假设我应该将控制/控制信息作为参数传递给函数,但我似乎无法让语法正常工作。有什么建议么?
我在 ASP.NET 页面中有一些 JavaScript,如下所示:
var list = $get('<%=Topics.ClientID %>');
我现在编写了许多使用这种语法的函数,我想集中我的 JavaScript 并将其移动到外部 JavaScript 文件中。但是,这会中断,因为找不到“主题”。
让它发挥作用的最佳策略是什么?我假设我应该将控制/控制信息作为参数传递给函数,但我似乎无法让语法正常工作。有什么建议么?
您应该从返回客户端元素的 usercontol 内部创建一个 javascript 方法。然后在您的其他页面/控件中,只需访问该方法
在用户控制中
<script language="javascript">
function GetTopics() {
return = $get('<%=Topics.ClientID %>');
}
</script>
在其他页面/控件中
<script language="javascript">
var list = GetTopics();
</script>
编辑-您面临的问题是您需要 Topics.ClientID 不存在的地方。因此,弥合这一差距的唯一真正方法是将其放在一个共同的地方。如果您真的不想这样做,您可以尝试通过其他一些标准来选择您的元素。如果你使用 jQuery,你可以用一个 Topics 类标记一个元素,然后用 $(".Topics") 找到它。
这是 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 页面分开,并将所有服务器控件依赖项放在一个标记中。
如果您知道每页只有一个名为“Topics”的服务器控件,并且您使用命名约定,您可以从任何控件 Topics 继承(也许它是一个 HiddenField?您没有指定)并覆盖其 ClientId getter 以返回它的服务器ID是这样的:
http://andreascode.wordpress.com/2009/04/27/tiny-drips-of-aspnet-juice/
然后您可以在您的 javascript 文件中知道页面中将有一个隐藏字段,其 id 设置为“主题”并直接使用它。
根据您的域/情况,这可以为您节省大量时间,也可以让您花很多时间。