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