关于在 ASP.Net 中使 javascript 对象名称唯一的想法?

Posted

技术标签:

【中文标题】关于在 ASP.Net 中使 javascript 对象名称唯一的想法?【英文标题】:Ideas on making a javascript object name unique in ASP.Net? 【发布时间】:2010-09-29 04:28:23 【问题描述】:

我创建了一个 ASP.Net 用户控件,该控件将多次放置在网页中。在这个控件中,我定义了一个 javascript 对象,例如:

function MyObject( options )

  this.x = options.x;


MyObject.prototype.someFunction=function someFunctionF()

  return this.x + 1;

在后面的代码中,我在启动脚本中创建了 MyObject --

var opts =  x: 99 ;

var myObject = new MyObject( opts );

当控件中的某个按钮被按下时,它将调用 myObject.someFunction()。现在假设 x 的值对于一个控件将是 99,而对于另一个控件则为 98。这里的问题是 var myObject 将被重复,只有最后一个实例很重要。当然,有一种方法可以使 var myObject 使用一些我还没有遇到过的概念独一无二。想法?

谢谢,

克雷格

【问题讨论】:

【参考方案1】:

优秀的解决方案安东尼。提供的其他解决方案同样好,我确实考虑过它们,但我正在寻找像这个解决方案这样更优雅的东西。 谢谢!

【讨论】:

【参考方案2】:

你的 Javascript 是这样的:-

function MyObject(options)  this.x = options.x; 
MyObject.prototype.someFunction = function()  return this.x + 1; 
MyObject.create(id, options) 
    if (!this._instances) this._instances = ;
    return this._instances[id] = new MyObject(options);

MyObject.getInstance(id)  return this._instances[id]; 

你的启动 javascript 是这样的:-

MyObject.create(ClientID, x: 99);

其他需要使用实例的代码(比如在客户端的 onclick 事件中)

String.Format("onclick=\"MyObject.getInstance('0').someFunction()\", ClientID);

注意对客户端全局命名空间的影响很小,只有 MyObject 标识符被添加到全局命名空间中,而不管页面中添加了多少控件实例。

【讨论】:

【参考方案3】:

您可以将“x”的值设为静态并在代码中的任何位置访问它,例如:

function MyObject( options )  MyObject.x = options.x; 
MyObject.x = 99; // static
MyObject.prototype.someFunction = function ()  return MyObject.x + 1; 

这样您就可以在代码中的任何位置访问 MyObject.x,甚至无需重新实例化 MyObject。

【讨论】:

【参考方案4】:

我通过使用 ScriptManager.RegisterClientScriptBlock 将字符串注册为客户端的 JavaScript 块来做到这一点。然后我可以使用 0、1..、n 占位符修改我的脚本字符串以注入必要的 ID。这取决于您的代码结构,这是否是最优雅的方式,但它在紧要关头起作用。然后,您可以使用对 Me.ClientID 的引用来注入变量名称。

【讨论】:

【参考方案5】:

如果它只是一个值,为什么不让函数将它作为参数并构建您的 onclick 处理程序,以便为每个控件输入正确的值。如果它比这更复杂,则考虑将选项设置为数组,并且对于每个控件,将正确的选项插入数组中与每个特定控件对应的位置。然后将适当的索引传递到数组中的函数中。

【讨论】:

以上是关于关于在 ASP.Net 中使 javascript 对象名称唯一的想法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 中使控制器作用域或单例而不是瞬态?

如何在Asp .Net Web API中的请求的整个生命周期中使类对象可用?

如何在 C# 中使图像可见

asp.net mvc 开发人员的 javascript 最佳实践

即时或在构建时连接和缩小 JavaScript - ASP.NET MVC

如何在控制器方法中使 JWT 令牌授权可选