JavaScript中的服务器侧变量
-
15-09-2020 - |
题
我认为这不是一个巨大的交易,因为在这个问题上有其他方式,但我真的很好奇,因为我认为这是可能的。
我有一个公共属性,返回后面的代码中的布尔值。我想在我的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()%>') ...
.
然后它仍然始终是假的,但它进入IF条件,因此行为好像它始终是真的。
另一件事是我发现的大多数javascript / server标记的东西我发现使用 <%= editmode%> ,但我不能这样做,因为每次我使用=而不是#我得到一个例外:
“控件集合不能 修改后,因为控制包含 代码块(即<%......%>)。“
所以我通过使用#来解决这个问题,并说
Page.Header.DataBind()
Page.Form.DataBind()
.
在页面加载事件处理程序中。
任何想法?先感谢您。 :)
(也,我通常使用c#,所以我可能会在VB部分中没有在VB部分做的事情,所以可以自由地指出它也是如此)
解决方案 2
这有助于我修复错误。 “控件集合无法修改,因为该控件包含代码块“
将javascript函数移出头部并进入身体修复问题。似乎是一些可能导致这个问题的事情,但在我的情况下,最有可能的罪魁祸首是AjaxToolkit。
其他提示
首先,尝试更改为此:
<%=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没有对服务器进行任何调用。
还有一件事。
您确实意识到您正在将字符串转换为另一个字符串,其中包含
'<%#editMode()%>'.toString()
.
右?
我想你想要的是这个
if ('<% =editMode.toString() %>'= 'True')...
.
还是更好但
if (<% =editMode.toString().ToLower() %>)...
. 不隶属于 StackOverflow