【问题标题】:Access global static variable from code behind through Javascript通过Javascript从后面的代码访问全局静态变量
【发布时间】:2014-08-07 15:34:49
【问题描述】:

在从 javascript 调用的代码隐藏函数中获取静态变量时,我在访问类中的静态变量时遇到了一些问题。

我的aspx页面:

<script type="text/javascript">
function AlertMsg(msg) {
   var msg213 = "<%= GetValue(" msg ") %>";
   alert(msg + '::' + msg213);
}
</script>

后面的代码:

public string GetValue(string sString)
{
   return MyNamespace.MyClass.MyStaticVariable;
}

我在另一个页面的 page_load 中设置了这个变量。我通过从 C# WebBrowser 应用程序调用它来访问 javascript 函数。它总是空的。

有什么想法吗?

【问题讨论】:

  • 实际发生的是在服务器上调用GetValue,而您传入​​的参数是字符串文字" msg "。 JavaScript 在客户端上运行,服务器标记(例如 &lt;% %&gt;)在服务器生成页面输出时执行。
  • 您可能不想这样做,但您可以将值加载到隐藏字段中,以便客户端可用。
  • 生成的 HTML/JS 长什么样子?
  • 但是在尝试获取静态值的值之前是否加载了其他页面?最好将类设为静态并使用静态构造函数来初始化值。否则使用 global.asax 文件。
  • 我在运行时设置值。之后我尝试调用 javascript 函数来获取变量(通过 WebBrowser.InvokeScript),但随后它显示为 NULL。

标签: c# javascript asp.net


【解决方案1】:

我认为您只需要在对“msg”的引用周围添加“+”

var msg213 = "<%= GetValue(" + msg + ") %>";

【讨论】:

    【解决方案2】:

    ASP.NET 不像桌面应用程序,任何写在另一个页面上的变量在移动到另一个页面时都会丢失。您需要将值保存到永久保存的位置。

    1. 会话
    2. 缓存
    3. 数据库
    4. 应用或网络配置文件。
    5. 变量必须是 const 或 static

    【讨论】:

    • 我同意他不理解在客户端执行的代码与在服务器上执行的代码之间的区别,但是由于他将值存储在静态变量中,那么当他将其设置为一个时页面,当另一个页面请求进来时,它就可以使用(取决于他如何声明静态字段)。
    • 每个页面请求都会清除所有变量,除非它是一个常量,否则写入它的任何值都会改变。
    • 任何声明为静态的字段都将保留最后分配的值,无论有多少页面请求,只要应用程序池没有回收。
    • 是的,很抱歉你是对的。它也可以声明为静态的。
    • 我在一个类中使用了一个静态变量,这在其他页面中效果很好。但是当我试图从 Default.aspx 中获取它时,它始终为 NULL。
    【解决方案3】:

    试试这个

    '<%= GetValue("Some Value") %>';
    

    这意味着在页面渲染时,GetValue方法调用和返回字符串将写入文档正文中,如Respose.Write

    这只会在页面渲染时发生,并且不会发生进一步的调用。

    【讨论】:

      【解决方案4】:

      我认为部分混乱来自代码中的格式。如果您只查看服务器标签:&lt;%= GetValue(" msg ") %&gt;,您会看到正在调用 GetValue 方法,并且正在传入文字字符串 msg。服务器标签本身有引号,但那些确实不影响服务器标签内的内容。您没有传入 JavaScript 函数的 msg 参数的值。

      无法从 JavaScript 中以如此简单的方式调用服务器方法,它需要使用 AJAX 之类的东西来完成。

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2022-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多