2012-10-01 107 views
0

嘗試將代碼隱藏的值(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

回答

0

第一綁定值到一個隱藏的控制

然後從隱藏控制

0
<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 –

0

您可以使用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; 
    } 
}