2010-07-13 79 views
0

我想這不是一個大問題,因爲還有其他解決此問題的方法,但我真的很好奇答案,因爲我認爲這是可以做到的。在javascript中的服務器端變量

我有一個公共屬性,在我的代碼後面返回一個布爾值。我想在我的javascript驗證函數中訪問這個服務器變量,但到目前爲止,還沒有完全得到它。

Public Property editMode() As Boolean 
    Get 
     If Cache("editMode") IsNot Nothing Then 
      Return (DirectCast(Cache("editMode"), Boolean)) 
     Else 
      Return False 
     End If 
    End Get 
    Set(ByVal value As Boolean) 
     Cache("editMode") = value 
    End Set 
End Property 

function validateEdit() 
{ 
    alert("editMode value is " + '<%#editMode()%>'); 
    if ('<%#editMode()%>'.toString() == "True") 
    { 
     alert("You are currently in edit mode. Please save or cancel changes."); 
     return false; 
    } 
    return true; 
} 

我已經嘗試了一堆變化,但它總是假的。在當前的代碼警報返回「編輯模式值爲False」

當我使用:

if ('<%#editMode()%>') ... 

然後它仍然總是假的,但它進入if條件,這樣的行爲就好像它是永遠是真的。

要提到的另一件事是,大多數JavaScript /服務器標籤的東西,我覺得說,使用<%=編輯模式%>,但因爲每次我用的=代替#我,我不能這樣做得到一個異常:

「Controls集合不能 修改,因爲該控件包含 代碼塊(即<%...%>)。」

所以我用#,說

Page.Header.DataBind() 
    Page.Form.DataBind() 

在頁面加載事件處理程序解決了這個。

任何想法?先謝謝你。 :)

(另外,我通常使用C#,所以我可能會不知不覺地幹過的VB部分的東西愚蠢的,所以隨時指出這一點太)

+0

何時以及如何將其設置爲True? – womp 2010-07-13 22:06:10

+0

在代碼隱藏中,點擊按鈕。 – Brandi 2010-07-13 22:30:50

回答

1

首先,嘗試改變這樣:

<%=editMode()%> 

不知道是不是這樣,但它不能傷害。其次,當你第一次加載頁面時,你處於編輯模式嗎?該代碼將運行服務器端並將結果返回給用戶。

在用戶的頁面,就會看到:

function validateEdit() 
{ 
    alert("editMode value is " + 'False'); 
    if ('False'.toString() == "True") 
    { 
     alert("You are currently in edit mode. Please save or cancel changes."); 
     return false; 
    } 
    return true; 
} 

同樣,不知道這是它,但要明白,JavaScript並不是向服務器的任何調用是非常重要的。

+0

據我所知,它在服務器端是正確的。 editMode會根據需要進行更改,並且不會像真實一樣開始。如果你閱讀我的文章,我已經試過<%= editMode()%>,也許你可以告訴我錯誤來自哪裏? – Brandi 2010-07-13 22:09:03

+0

你在評論中說過:editMode並沒有從真正的開始。因此,JavaScript呈現爲我向你展示的內容,並且調用validateEdit()將總是返回相同的值。 – riwalk 2010-07-13 22:11:26

+0

我一定錯過了你的意思?我可能應該提到我幾乎知道關於JavaScript的zip文件......我有一個可以在服務器端改變它的按鈕,但它仍然返回false,即使在我經過調試以確保它是真實的之後。它不應該是'True'.toString()==「True」嗎?老實說,我現在最好的猜測是,#不能以我認爲的方式進行評估。 – Brandi 2010-07-13 22:26:10

0

還有一件事。

你一定要明白你是一個字符串轉換爲另一個字符串

'<%#editMode()%>'.toString() 

,對嗎?

我想你想這是什麼

if ('<% =editMode.toString() %>'= 'True')... 

或更好,但

if (<% =editMode.toString().ToLower() %>)... 
+0

好吧,正如後文中提到的那樣,我意識到=被更廣泛地使用,並且我一直試着反覆使用它,但是爲什麼我會在每次使用=而不是#時提到異常? – Brandi 2010-07-13 22:30:05

+0

我的評論並不是關於= vs#。這是因爲你正在將一個文字字符串轉換爲另一個不必要的字符串。此外,布爾轉換可能應該發生在服務器端而不是客戶端。 – JohnFx 2010-07-14 15:43:07

相關問題