Переменные на стороне сервера в JavaScript - PullRequest
0 голосов
/ 14 июля 2010

Полагаю, это не так уж и сложно, поскольку есть и другие способы решения этой проблемы, но мне действительно любопытно ответить на этот вопрос, поскольку я думал, что это возможно.

У меня есть публичное свойство, которое возвращает логическое значение в моем коде. Я хотел бы получить доступ к этой серверной переменной в моей функции проверки 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;
}

Я пробовал несколько вариантов этого, но это всегда Ложь. В текущем коде предупреждение возвращает «значение editMode равно False»

Когда я использую:

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

Тогда это все еще всегда False, но оно входит в условие if, поэтому поведение такое, как если бы оно всегда было истинным.

Еще одна вещь, о которой стоит упомянуть, - это то, что большинство тегов javascript / server, которые я нахожу, говорят, что нужно использовать <% = editMode%> , но я не могу этого сделать, потому что каждый раз, когда я использую = вместо # Я получаю исключение:

"Коллекция Controls не может быть изменен, потому что элемент управления содержит блоки кода (т. е. <% ...%>). "

Итак, я решил это, используя # и сказав

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

В обработчике событий загрузки страницы.

Есть идеи? Заранее спасибо. :)

(Кроме того, я обычно использую C #, так что, возможно, я неосознанно сделал что-то глупое в части VB, поэтому не стесняйтесь указывать на это тоже)

Ответы [ 3 ]

1 голос
/ 14 июля 2010

Сначала попробуйте перейти на это:

<%=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 голосов
/ 14 июля 2010

Это помогло мне исправить ошибку. «Коллекция элементов управления не может быть изменена, поскольку элемент управления содержит блоки кода»

Перемещение функции javascript из головы в тело решает проблему. Кажется, есть несколько причин, которые могут вызвать эту проблему, но в моем случае наиболее вероятным виновником является AjaxToolKit.

0 голосов
/ 14 июля 2010

Еще одна вещь.

Вы понимаете, что конвертируете строку в другую строку с

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

Верно?

Я думаю, что вам нужно это

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

или еще лучше

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