同一ASP.NET用户的多个实例控制Javascript名称冲突

时间:2013-09-19 21:33:48

标签: javascript asp.net user-controls

问题:我有一个用户控件(.ascx),里面有大量的javascript代码。我在同一页面上有两个用户控件实例。当代码运行时,两个用户控件的行为不正常,因为所有具有相同名称的js对象只能有一个值(包括函数)。 javascript在后面的代码中,它通过“ScriptManager.RegisterStartupScript(.....)”注册。

我已经彻底搜索过了,虽然有一些建议的线程我发现除了字面意思通过整个用户控件并将ID附加到引发碰撞问题的函数名之外没有任何其他工作。 (这需要仔细检查所有代码并确定是否存在问题)。

示例:

Dim asdf As String = ""
asdf &= "function foo" & UNIQUE_ID & "() {" & vbCrLf
asdf &= .....u get the idea......
asdf &= "}"

有比这更优雅的解决方案吗?出于这个原因,将javascript放在用户控件中是不好的做法?

1 个答案:

答案 0 :(得分:1)

也许尝试关闭命名空间中单个控件的所有JS代码?因此,生成的代码看起来像这样:

var controlNamespace = {
   ...here goes the code that you have now for a control
};

您可以通过添加“controlNamespace”来调用您的函数。字首。 您唯一需要关心的是每个控件的脚本都包含在不同的命名空间中。假设您在服务器端动态创建所有JS代码,就像在您粘贴的示例中一样,这应该非常简单。 这样每个控件都会将它的相应代码包含在一个单独的命名空间中,无论你在页面上创建了多少这些控件,它们都不会干扰它们自己。