将C#的值传递给Javascript

7

当加载页面时,我想从服务器端变量向我的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”不存在
另外,我想尝试在不使用隐藏字段的情况下完成此操作。

只是为了确定,script标签是否在包含public string blah { get; set; }声明的.aspx.cs文件的页面中,并且该页面已将该.aspx.cs文件声明为其代码后端? - mlorbetske
6个回答

11

我相信你的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”。 - Nick LaMarca
我的 JavaScript 代码正确吗?它显示 blah 不在当前上下文中。 - Nick LaMarca
1
啊啊啊!我把代码放在网页表单里,js放在主页面里。它运行得很好,谢谢。 - Nick LaMarca
@Shredder - 无法从主页面中的JS调用变量吗? - Ryan S
1
@RyanSammut,除非变量在主类中,否则我认为不行。 - Nick Rolando
显示剩余2条评论

3
在这种情况下,blah 是局部变量,它只能在 Page_Load 中使用。如果要公开访问它,您需要将其提升为类级成员(可能需要将其作为属性),才能像那样访问它。

2
您可以在 HTML 页面中添加一个隐藏的输入框:

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

然后在您的代码后端将其设置为要传递给.js函数的内容:

param1.value = "myparamvalue"

最后,您的JavaScript函数可以像下面这样访问:
document.getElementById("param1").value

这是WebForms,因此您必须在输入中包含runat="server",以使其可以从服务器代码访问。 - mlorbetske
你可能需要添加ClientIDMode=static,否则id会带一些内部前缀。 - boggy

0

你应该在类级别上声明blah


1
@Matthew,感谢你的帮助,但请确保当答案只有一行或少于一行时,它应该是一个注释。希望你明白我的意思! - swiftBoy
2
@RDC,有具体的规定吗?我认为我的答案解决了确切的问题,而不会用无用的信息淹没读者。 - Matthew
@Matthew.. 没有这样的规定,我同意你的答案解决了问题,所以我表示感谢 :) ,但是像你一样帮助人们,我们可以通过管理我们的问答来使 Stack Overflow 变得更好。嗯...我总是投票支持那些解决问题或有价值的评论和回答帖子。 - swiftBoy

0

我过去所做的事情就是WebForms的功能--创建一个隐藏字段来存储客户端需要的值。如果您使用的是4.0版本,您可以将隐藏字段客户端ID模式设置为静态,以帮助保持代码更加清晰。基本上,将您的值添加到隐藏字段中,然后从JavaScript中获取该值或修改它(如果您想要传递回来),因为它只是一个DOM元素。

如果您真的想使用代码--像变量一样,它需要在类范围内可访问。


0

你的 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”不在当前上下文中。 - Nick LaMarca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接