【问题标题】:Why does this javascript variable I'm creating via C# only get updated once?为什么我通过 C# 创建的这个 javascript 变量只更新一次?
【发布时间】:2010-10-13 07:01:05
【问题描述】:

在我的 ASP.Net 应用程序的 C# 代码隐藏中,我设置了一个变量,然后我想设置一个等于它的 Javascript 变量,以便我可以在客户端使用它做一些工作。这个 C# 变量是在事件处理程序中设置的,它的变化相当频繁。

所以,我的事件处理程序只做这个......

int scale = (int)myObject.Scale;
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "JSVariables", "scale=" + scale, true);  

然后我在我的 JS 中有事件处理程序,只是提醒值。

alert(scale);

问题是比例值仅在第一次触发事件时设置。每次引发事件时,我都可以单步执行我的 C# 代码,并看到 RegisterClientScriptBlock 被调用,并且该比例实际上得到了不同的值。

如何让这个值不恒定?每次达到 RegisterClientScriptBlock 行时,都应该将一个新值加载到我的 JS 比例变量中,但它只是保持最初的状态。有什么想法吗?

【问题讨论】:

    标签: c# .net javascript


    【解决方案1】:

    RegisterClientScriptBlock 按类型 (this.GetType()) 和密钥 ("JSVariables") 注册您的脚本。下次在同一个执行堆栈中调用 RegisterClientScriptBlock 时,它将检查该类型和密钥的脚本是否已注册,如果是,则什么也不做。

    这样做的目的是消除重复的共享脚本。如果您的五个控件都依赖于一个共享的 JavaScript 包含,那么您只想在页面上包含一次。所以所有的控件都可以调用同一个include函数和key,保证不会被多次包含。

    【讨论】:

      【解决方案2】:

      除了 Rex 所说的,如果您使用的是 ASP.NET Ajax,如果您想在部分回发之间更新这些值,您将需要使用 ScriptManager 上的 RegisterClientScript 方法,这听起来确实像您正在做的那样.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 2022-08-04
        • 1970-01-01
        • 2023-04-08
        相关资源
        最近更新 更多