javascript中的服务器端变量

时间:2010-07-13 21:56:24

标签: javascript validation server-variables

我认为这不是一个大问题,因为还有其他方法解决这个问题,但我真的很好奇答案,因为我认为这是可能的。

我有一个公共属性,在我的代码后面返回一个布尔值。我想在我的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部分做了一些傻瓜,所以请随意指出这一点)

3 个答案:

答案 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。