从代码隐藏向JavaScript传递值

问题描述:

尝试将代码隐藏的值(abc)传递给JavaScript,但页面失败并且无法加载。语法有问题吗?我注意到,通常<%...%>被突出显示为黄色,但在我的代码中并非如此。从代码隐藏向JavaScript传递值

<script src="../Scripts/jqModal.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $().ready(function() { }); 

    $("a").click(function() { 
    if (this.id == "optionalFeatures_Online") { 
     var abc = "<%=Variable_codebehind %>"; 
    } 
     }); 
</script> 

代码ON_LOAD事件背后:

protected override void OnLoad(EventArgs e) 
    { 
     Variable_codebehind = "hello world"; 
    } 

错误日志文件来自:

Web.HttpUnhandledException”被抛出。 ---> System.Web.HttpException:控件集合不能被修改,因为控件包含代码块(即<%...%>)。

+0

语法看起来没事。你有没有在任何地方声明变量'Variable_codebehind'?它必须是页面类中的“受保护”或“公共”成员,否则它不能从标记中获得。 – Guffa

+0

首先,'$()。ready(function(){});'没有意义。它需要包装你所有的JavaScript来产生任何效果。你也需要说出你想等待什么准备就绪......例如; '$(document).ready(function(){// here here});' – smilledge

+1

如果在'Variable_codebehind'内容中有双引号,那么就搞砸了。 – Lucero

第一绑定值到一个隐藏的控制

然后从隐藏控制

<script src="../Scripts/jqModal.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() {  
     $("a").click(function() { 
      if (this.id == "optionalFeatures_Online") { 
       var abc = <%=Variable_codebehind %>; 
      } 
     }); 
    }); 
</script> 

代码隐藏ON_LOAD事件中获得的价值:

protected override void OnLoad(EventArgs e) 
    { 
     Variable_codebehind = HttpUtility.JavaScriptStringEncode("hello world", true); 
    } 
+0

JavaScriptStringEncode上出现红色下划线 - 我需要USING语句吗? – Susan

+0

您可以轻松查看:http://msdn.microsoft.com/en-us/library/dd991914(v=vs.100).aspx –

您可以使用Page.RegisterStartupScript和从Code-Behind传递一些变量。将这个脚本放在一个.js文件,并从代码隐藏调用它的OnLoad方法:

的OnLoad代码隐藏:

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", String.Format("MyScript({0});", codeBehindVar)); 

MyScript.js

function MyScript(myVar) 
{ 
    var self = this; 
    $("a").click(function() { 
    if (this.id == "optionalFeatures_Online") { 
     var abc = self.myVar; 
    } 
}