0

我想这没什么大不了的,因为这个问题还有其他方法,但我真的很好奇答案,因为我认为这是可能的。

我有一个公共属性,它在后面的代码中返回一个布尔值。我想在我的 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 value is False”

当我使用:

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

然后它仍然始终为 False,但它进入了 if 条件,因此行为就好像它始终为 true。

还要提到的另一件事是,我发现的大多数 javascript/server 标签内容都说要使用<%=editMode %>,但我不能这样做,因为每次我使用 = 而不是 # 时都会出现异常:

“无法修改 Controls 集合,因为该控件包含代码块(即 <% ... %>)。”

所以我通过使用 # 并说解决了这个问题

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

在页面加载事件处理程序中。

有任何想法吗?先感谢您。:)

(另外,我通常使用 C#,所以我可能在 VB 部分不知不觉中做了一些愚蠢的事情,所以也请随时指出这一点)

4

3 回答 3

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 不会对服务器进行任何调用。

于 2010-07-13T22:02:46.920 回答
0

还有一件事。

您确实意识到您正在将一个字符串转换为另一个字符串

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

对?

我想你想要的是这个

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

或者更好

if (<% =editMode.toString().ToLower() %>)...
于 2010-07-13T22:13:56.107 回答
0

这帮助我修复了错误。 “控件集合无法修改,因为控件包含代码块”

将 javascript 函数从头部移到正文中可以解决问题。似乎有几件事可能导致此问题,但就我而言,最可能的罪魁祸首是 AjaxToolKit。

于 2010-07-14T14:13:50.803 回答