2009-12-14 38 views
8

我有這樣的代碼在.aspx文件中:「預期的表達」與<%=foo%>內的JavaScript

<script type="text/javascript" language="javascript"> 
function init() 
{ 
    <%= x %> 
} 

它工作正常(x是將被綁定到一些JavaScript字符串但在編譯時,我在<%=

上得到「預期表達式」警告,我知道這不是世界上最好的代碼,但是有各種各樣的代碼歷史位, JavaScript進入頁面。所有完全無害的:)

回答

14

警告正在發生,因爲代碼塊是JavaScript <script>塊內;編譯器試圖在識別HTML /控件和JavaScript之間的差異方面很聰明。

雖然這是一個有點難看,你應該能夠通過使用eval('<%= x %>')

消除警告您可能還必須看一個文章中,我使用ASP.NET創建動態JavaScript中寫道:http://www.12titans.net/p/dynamic-javascript.aspx

2

如果你想成爲完全合法的,使用文字:

<asp:Literal ID="litX" runat="server"></asp:Literal> 

,並設置其Text整個<script type="text/javascript" language="javascript">...</script>塊在服務器端。

2

Visual Studio在頁面上是validating the HTML markup。嚴格地說,'<'是無效的XHTML。此警告可能是由於驗證的限制造成的,因爲Visual Studio將javascript中的'<'字符解釋爲'小於'意思!

顯然,這些內聯表達式不是有效的客戶端代碼。可以在工具|選項|文本編輯器| HTML中更改HTML驗證選項。請注意,最好簡單地忽略這些警告,而不是驗證HTML 4.01或完全關閉驗證。

2

如果您只是在頁面中添加javascript,則可以使用RegisterClientScriptBlock構建服務器端腳本,然後讓它將其輸出到頁面。

這樣,您不必在頁面中擁有任何服務器端腳本以及隨之而來的所有開銷。

2

我以前做過這件事,沒有問題。但是,我使用jQuery的$(document).ready()而不是init()。不過,我認爲這不應該成爲一個問題。

什麼樣的數據類型是x?如果它是一個字符串,請嘗試用單引號將它包裝起來,如果它是一個數字,則使用該數據類型的解析函數。

<script type="text/javascript" language="javascript"> 
var s; 
var n; 
function init() 
{ 
    s = '<%= x %>'; 
    n = parseInt('<%= x %>'); 
    eval('<%= x %>'); /* Raw Javascript */ 
} 
</script> 

另一個問題是該屬性的訪問級別。 ASP.NET Web表單不能直接從代碼隱藏中訪問私有字段。訪問必須得到保護或公開。

Eval Javascript Function

+0

該字符串包含我想要執行的原始JavaScript代碼。 – 2009-12-15 03:21:41

+0

然後你也可以使用eval('string'); – 2009-12-15 14:52:28

0

我發現了這個問題。

看來我錯誤地在腳本上面註釋掉了HTML。

<%-- <div id="directionpanel" ></div>--%> 

<script type="text/javascript"> 
    var LIST = <%= getJson()%>; 
</script> 

我得到預期的表達上的getJSON警告()

正確的評論HTML將修復警告。

- >