【问题标题】:Pass C# Values To Javascript将 C# 值传递给 Javascript
【发布时间】:2012-06-13 18:26:05
【问题描述】:

在加载页面时,我想从服务器端变量向我的 javascript 函数传递一个值。

我似乎无法让它工作,这就是我所拥有的:

Asp.Net

protected void Page_Load(object sender, EventArgs e)
{
    string blah="ER432";
}

Javascript

<script type="text/javascript">

    var JavascriptBlah = '<%=blah%>';

    initObject.backg.product_line = JavascriptBlah;

</script>

将其添加到页面

 public string blah { get; set; }


        protected void Page_Load(object sender, EventArgs e)
        {
           blah="ER432";
        }

我仍然收到错误消息: CS0103:当前上下文中不存在名称“blah”

我也想尝试在不使用 hdden 字段的情况下完成此操作

【问题讨论】:

  • 可以肯定的是,script 标记位于页面中,其中包含声明了 public string blah { get; set; } 的 .aspx.cs,并且页面已声明该 .aspx.cs 文件作为其代码右边?

标签: c# javascript asp.net


【解决方案1】:

我相信你的 C# 变量必须是一个类成员才能做到这一点。尝试在类级别声明它而不是 Page_Load() 的局部变量。一旦 page_load 完成,它显然会失去作用域。

public partial class Example : System.Web.UI.Page
{
    protected string blah;

    protected void Page_Load(object sender, EventArgs e)
    {
        blah = "ER432";
        //....

【讨论】:

  • 我收到此错误:CS0103:当前上下文中不存在名称“blah”
  • 你一定是做错了什么。你做的和我最近的编辑一样吗?我已经测试过了,它工作正常。
  • 我的 JavaScript 对吗?它说 blah 不在当前上下文中
  • 啊啊啊啊!我在网页表单中有代码,在母版页中有 js。效果很好谢谢
  • @RyanSammut 除非变量在大师班,否则我不这么认为。
【解决方案2】:

在这种特殊情况下,blahPage_Load 本地的,您必须将其设为类级别成员(可能将其设为属性)才能像这样公开。

【讨论】:

    【解决方案3】:

    你可以在你的 html 页面中放置一个隐藏的输入:

    <input  type="hidden" runat='server' id="param1" value="" />
    

    然后在你后面的代码中将它设置为你想要传递给你的 .js 函数的内容:

    param1.value = "myparamvalue"
    

    最后你的javascript函数可以访问如下:

    document.getElementById("param1").value
    

    【讨论】:

    • 这是网络表单,因此您必须在输入中包含 runat="server" 才能从服务器代码访问它
    • 您可能需要添加 ClientIDMode=static 否则 id 会带有一些内部前缀。
    【解决方案4】:

    我过去所做的就是网络表单的功能——创建一个隐藏字段来存储客户端所需的值。如果您使用的是 4.0,则可以将隐藏字段客户端 ID 模式设置为静态,以帮助保持内容更清洁。基本上,将您的值添加到隐藏字段,然后您可以从 javascript 获取该值或修改它(如果您想将其传回),因为它只是一个 dom 元素。

    如果你真的想使用代码——比如变量,它需要在类范围内可访问。

    【讨论】:

      【解决方案5】:

      您的string blah 必须是您的Page 类的公共属性,而不是Page_Load 中的局部变量。您需要了解范围界定。

      public class MyPage
      {
          public string blah { get; set; }
      
          protected void Page_Load(object sender, EventArgs e)
          {
              blah = "ER432";
          }
      }
      

      【讨论】:

      • 此代码对我不起作用,请检查我的 javascript,我收到一条错误消息,提示“blah”不在当前上下文中
      【解决方案6】:

      你应该在类级别声明blah

      【讨论】:

      • @Matthew.. 感谢您的帮助,但请确保当答案为单行或更少时,它应该是评论,希望您能得到我!
      • @RDC 是否有特定的规则说明这一点?我觉得我的答案解决了确切的问题,而不会用无用的信息来吸引读者。
      • @Matthew.. 不,没有这样的规则,即使我同意你的回答解决了问题,所以我表示感谢:),但是你喜欢以同样的方式帮助人们 我们可以通过管理我们的 Q/A 来制作更好的堆栈溢出,嗯..我总是投票给那些解决问题或作为答案帖子有价值的 cmets。
      猜你喜欢
      • 1970-01-01
      • 2013-07-02
      • 2014-01-17
      • 2017-09-03
      • 1970-01-01
      • 2013-05-25
      • 2013-02-03
      • 1970-01-01
      • 2013-05-24
      相关资源
      最近更新 更多