Javascript AJAX&;ASP.net,引用外部文件中的服务器控件

Javascript AJAX&;ASP.net,引用外部文件中的服务器控件,javascript,ajax,asp.net-ajax,parameters,clientid,Javascript,Ajax,Asp.net Ajax,Parameters,Clientid,我在ASP.NET页面中有一些JavaScript,如下所示: var list = $get('<%=Topics.ClientID %>'); var list=$get(“”); 我现在编写了许多使用这种语法的函数,我想集中我的JavaScript并将其移动到一个外部JavaScript文件中。但是,这会中断,因为找不到“主题” 让这项工作发挥作用的最佳策略是什么?我假设我应该将控件/控件信息作为参数传递给函数,但我似乎无法使语法正常工作。有什么建议吗?您应该从UserCo

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

var list = $get('<%=Topics.ClientID %>');
var list=$get(“”);
我现在编写了许多使用这种语法的函数,我想集中我的JavaScript并将其移动到一个外部JavaScript文件中。但是,这会中断,因为找不到“主题”


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

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

在用户控制中

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

函数GetTopics(){
return=$get(“”);
} 
在其他页面/控件中

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

var list=GetTopics();

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

如果您知道每页只有一个名为“Topics”的服务器控件,并且使用命名约定,则可以继承控件主题的任何内容(可能是HiddenField?您没有指定),并覆盖其ClientId getter以返回其服务器id,如下所示:

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


根据您所在的领域/情况,这可能会为您节省大量时间,也可能会让您浪费大量时间。

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

我习惯于Javascript中的OOP,因此我的大多数JS外部文件如下所示:

function CouponManager()
{
}
在.aspx代码中,我执行以下操作:

<script language="javascript">
    var couponManager = new CouponManager();
</script>
从.aspx代码中,我执行以下操作:

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

var couponManager=新的couponManager
({
txtcooponnameid='',
TXTCoupondeDescriptionId=“”
});

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

很抱歉,我没有说得更具体。我希望将JavaScript集中到外部JavaScript文件中,而不是用户控件中。我已经更新了问题。我认为你将无法完成你所追求的目标。您可以在基本用户控件类中通过button将我发布的解决方案自动化。如果上述操作不起作用,可以将其作为window.GetTopics=GetTopics扔到window对象上;
<script language="javascript">
    var couponManager = new CouponManager
    ({
        txtCouponNameId = '<%= txtCouponName.ClientID %>',
        txtCouponDescriptionId = '<%= txtCouponDescription.ClientID %>'
    });
</script>