我认为这不是一个巨大的交易,因为在这个问题上有其他方式,但我真的很好奇,因为我认为这是可能的。

我有一个公共属性,返回后面的代码中的布尔值。我想在我的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() %>)...
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top