我认为这不是一个大问题,因为还有其他方法解决这个问题,但我真的很好奇答案,因为我认为这是可能的。
我有一个公共属性,在我的代码后面返回一个布尔值。我想在我的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标签都说要使用&lt;%= editMode%&gt; ,但我不能这样做,因为每次我使用=而不是#我得到一个例外:
“控件集合不能 修改,因为控件包含 代码块(即&lt;%...%&gt;)。“
所以我通过使用#并说
解决了这个问题 Page.Header.DataBind()
Page.Form.DataBind()
在页面加载事件处理程序中。
有什么想法吗?先感谢您。 :)
(另外,我通常使用C#,所以我可能在不知不觉中在VB部分做了一些傻瓜,所以请随意指出这一点)
答案 0 :(得分: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没有对服务器进行任何调用。
答案 1 :(得分:0)
还有一件事。
您确实意识到您正在使用
将字符串转换为另一个字符串'<%#editMode()%>'.toString()
右?
我认为你想要的是这个
if ('<% =editMode.toString() %>'= 'True')...
或更好
if (<% =editMode.toString().ToLower() %>)...
答案 2 :(得分:0)
这有助于我修复错误。 "The Controls collection cannot be modified because the control contains code blocks"
将javascript函数移出头部并进入正文可以解决问题。似乎是一些可能导致此问题的事情,但就我而言,最可能的罪魁祸首是AjaxToolKit。