3

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

我已经进行了彻底的搜索,尽管有一些带有建议的线程,但除了逐字逐句地检查整个用户控件并将 ID 附加到会引发冲突问题的函数名称之外,我没有发现任何其他方法。(这需要仔细检查所有代码并确定是否有问题)。

例子:

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

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

4

1 回答 1

1

也许尝试关闭命名空间中单个控件的所有 JS 代码?因此生成的代码可能如下所示:

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

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

于 2013-09-19T21:41:19.000 回答