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