gpt4 book ai didi

c# - 全局变量丢失导致函数分配失败

转载 作者:行者123 更新时间:2023-11-28 10:26:27 26 4
gpt4 key购买 nike

目前我正在为我工​​作的公司开发一个仪表板。该仪表板的功能对于这个问题并不感兴趣。该仪表板的构建如下:

  • Asp.net 页面(当然带有代码隐藏)
  • 定义 webmethods 的类
  • Javascript 外部文件(具有仪表板的所有功能,该仪表板完全在客户端运行)

对于其余部分,我使用带有 TFS(团队基础服务器)环境的 Visual Studio 2010 Ultimate,并使用 jQuery 库和 .NET Framework 4.0 (C#)。

好吧,有了这些信息,我希望我能解释我的问题。外部 javascript 文件包含三个类。我现在将它们命名为 ClassMain、ClassSub1、ClassSub2。类 ClassSub1 和 ClassSub2 是通过执行以下 javascript 命令从 ClassMain 派生的:

ClassSub1 = new ClassMain();

在 ClassMain 实例化之后,将加载 ClassSub1 的其他属性和方法。 ClassMain 可以与 ClassSub1 的属性和方法进行通信,ClassSub1 也可以与 ClassMain 进行通信。因此,这意味着它们就像一个具有各种功能的大类。

我解释这一点是因为我认为我的问题就在这里,但我不确定。类 ClassSub1 和 ClassSub2 在 asp.net 页面的代码隐藏中被实例化。以下代码片段对其进行了解释:

StringBuilder javascriptBlockBuilder = new StringBuilder();

javascriptBlockBuilder.AppendFormat("var {0};", this.Id);
javascriptBlockBuilder.AppendFormat("Sys.Application.add_load({0}LoadHandler);", this.Id);
javascriptBlockBuilder.AppendFormat("function {0}LoadHandler() {1}", this.Id, "{");
javascriptBlockBuilder.AppendFormat("{0} = new ClassSub1('{0}');{1}", this.Id, "}");

javascriptBlockBuilder.AppendFormat("var {0};", this.OtherId);
javascriptBlockBuilder.AppendFormat("Sys.Application.add_load({0}LoadHandler);", this.OtherId);
javascriptBlockBuilder.AppendFormat("function {0}LoadHandler() {1}", this.OtherId, "{");
javascriptBlockBuilder.AppendFormat("{0} = new SubClass2('{0}');{1}", this.OtherId, "}");

Page.ClientScript.RegisterStartupScript(this.GetType(), "ClassInitialization", javascriptBlockBuilder.ToString(), true);

在此代码片段中,我在页面上创建一个全局变量并将该类分配给它。 ClassMain 获得与 ClassSub1 和 ClassSub2 相同的 id,以便它们使用相同的变量,因为就像我说的几行一样,这些类必须充当一个类(ClassMain 和 ClassSub)。

这也有效,但问题也随之而来。在执行上面的代码片段之前(或之后)我有一些这样的语句:

this.myButton.Attributes.Add("onclick", string.Format("{0}.myJavascriptFunctionality();", this.id));

功能附加到分区、按钮等。

好的,现在我要渲染我的页面并且页面加载完美,但是当我单击其中一个按钮、分区等时,它是否告诉我它需要一个对象。不知何故,我的 ClassSub1 和 ClassSub2 全局变量丢失了,现在它无法执行我的 JavaScript 命令。

所以我的问题是,我的变量是怎么丢失的?我希望我的解释足以理解。

最佳答案

看起来您正在 myButton 的 onclick 事件中调用 ClassSub1.myJavascriptFunctionality()。

ClassSub1 是函数定义/原型(prototype) - 无论您使用什么 OOP 机制。您必须指定变量名,而不是类名。

像这样

this.myButton.Attributes.Add("onclick", String.Format("{0}.myJavascriptFunctionality();", this.Id));

关于c# - 全局变量丢失导致函数分配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4164952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com