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

时间:2009-05-26 14:37:19

标签: javascript ajax asp.net-ajax parameters clientid

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

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

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

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

3 个答案:

答案 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”并直接使用它。

根据您的域名/情况,这可能会为您节省大量时间或者让您度过难关。