【问题标题】:Server side variables in javascriptjavascript中的服务器端变量
【发布时间】:2011-03-15 14:05:55
【问题描述】:

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

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

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

要提的另一件事是,我发现的大多数 javascript/server 标签内容都说要使用 ,但我不能这样做,因为每次我都使用 =的 # 我得到一个例外:

"Controls 集合不能 修改,因为控件包含 代码块(即 )。”

所以我通过使用 # 并说

解决了这个问题
    Page.Header.DataBind()
    Page.Form.DataBind()

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

有什么想法吗?先感谢您。 :)

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

【问题讨论】:

  • 您何时以及如何将其设置为 True?
  • 在代码隐藏中,单击按钮。

标签: javascript validation server-variables


【解决方案1】:

还有一件事。

您确实意识到您正在使用

将一个字符串转换为另一个字符串
'<%#editMode()%>'.toString() 

对吗?

我想你想要的是这个

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

或者更好

if (<% =editMode.toString().ToLower() %>)...

【讨论】:

  • 好的,正如帖子中提到的,我意识到 = 使用更广泛,我一直在一遍又一遍地尝试使用它,但是为什么我每次使用时都会遇到我提到的异常= 而不是 #?
  • 我评论的重点不是关于 = vs #。那是您不必要地将文字字符串转换为另一个字符串。此外,布尔转换可能应该发生在服务器端而不是客户端。
【解决方案2】:

这帮助我修复了错误。 "The Controls collection cannot be modified because the control contains code blocks"

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

【讨论】:

    【解决方案3】:

    首先,尝试更改为:

    <%=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 会按应有的方式更改,并且开始时并非如此。如果您阅读了我的帖子,我已经尝试过 ,也许您可​​以告诉我错误是从哪里来的?
    • 您在评论中说过:editMode 开始时不是真的。因此,JavaScript 会按照我向您展示的那样呈现,调用 validateEdit() 将总是返回相同的值。
    • 我一定错过了你的意思?我可能应该提到我几乎知道关于 JavaScript 的 zip ......我有一个在服务器端更改它的按钮,但它仍然返回 false,即使在我完成调试以确保它是 true 之后也是如此。那么它不应该是'True'.toString()==“True”吗?老实说,我现在最好的猜测是 # 一定不是在评估我认为的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多