2009-05-26 64 views
3

我有一些JavaScript在ASP.NET页面看起来像这样:AJAX和ASP.net,引用服务器控件的外部文件

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

我现在已经写了许多功能,其中该语法使用,我想集中我的JavaScript并将其移入外部JavaScript文件。但是,由于无法找到“主题”,因此这会打破。

使这项工作最好的策略是什么?我假设我应该将控制/控制信息作为参数传递给函数,但似乎无法使语法起作用。有什么建议么?

回答

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> 

此方法允许我将.as从.aspx页面中分离出来,并将所有服务器控件依赖项都放在一个标记中。

1

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

在用户控制

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

在其他页/控制

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

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

+0

对不起,我不是更具体。我正在寻找将JavaScript集中到外部JavaScript文件而不是用户控件。我已经更新了这个问题。 – dtrickett 2009-05-26 15:02:04

0

如果您知道每个页面只有一个名为“Topics”的服务器控件,并且您使用命名约定,那么您可以从控件Topics(可能是HiddenField?您没有指定)继承它并覆盖它客户端Id吸气返回其服务器ID是这样的:

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

,那么你可以在你的JavaScript文件知道,会在页面的隐藏字段与ID为“主题”和使用直接。

根据您的域名/情况,这可能为您节省大量时间,或者让您在大时间内陷入困境。

相关问题