【问题标题】:Classic ASP bind input to variable经典 ASP 将输入绑定到变量
【发布时间】:2010-11-24 15:41:26
【问题描述】:

我更喜欢 .Net,但我目前工作的网站有一些遗留的经典 ASP 页面。在其中一种形式中,我们有几个隐藏的输入,它们被设置为由页面开头的一些 VBScript 创建和设置的变量,如下所示:

<input name="referer" type="hidden" value="<%= oReferer %>" />

该变量使用以下 VBScript 设置:

<script type="text/vbscript" language="vbscript" runat="server">
        dim oReferer
        dim origReferer, arrRefer1, arrRefer2
        origReferer = "self"

        'response.Write("referer - " & Request.ServerVariables("HTTP_REFERER"))
        'response.End()
        if not Request.ServerVariables("HTTP_REFERER") = "" then 
            if not Request.ServerVariables("HTTP_COOKIE") = "" then
                if not len(Request.Cookies("OrigReferer")) > 0 then
                    arrRefer1 = split(Request.ServerVariables("HTTP_REFERER"),"//")
                    if UBound(arrRefer1) > 0 then
                        arrRefer2 = split(arrRefer1(1), "/")
                        if UBound(arrRefer2) > 0 then
                            origReferer = arrRefer2(0)
                        end if
                    end if
                    Response.Cookies("OrigReferer") = origReferer
                    Response.Cookies("OrigReferer").Expires = DateAdd("d", 120, Date())
                else
                    oReferer = Request.Cookies("OrigReferer")
                end if 
            else
                oReferer = "no cookies"
            end if
        else
            oReferer = "self"
        end if
<script>

这段代码大部分时间都可以正常工作。当我尝试在更新版本的表单中使用此代码时,我遇到了两个问题。首先,输入本身根本没有设置。我不知道为什么因为代码确实有一个默认值,所以它至少应该总是“自我”。第二个问题是,不是我编写的原始代码使用 来设置值。当我现在这样做时,我得到一个 VBScript 错误,“类型不匹配”。

就像我说的我是一个 .Net 人,在 .Net 中解决这个问题不是问题。我也不知道 Classic ASP,我很困惑。我很想改用.Net,但现在不能使用这种特殊的形式,所以任何帮助解决这个问题都会很棒。

【问题讨论】:

  • 它应该告诉你错误发生在哪一行,你能在代码中突出显示吗?
  • &lt;% oReferer %&gt; 可能需要为&lt;%=oReferer %&gt;(即带等号)
  • 是的,你肯定需要= 符号。尝试在oReferer = Request.Cookies("OrigReferer") &amp; "**" 行值上附加一些东西,看看你是否正在执行这一行。如果 OrigReferer cookie 为空白,oReferer 也将为空白(空),并且不会在&lt;% =oReferer %&gt; 行中写入任何值。
  • 现在代码确实使用 = 符号来设置值。这修复了错误,但给了我空值。当我不使用 = 时出错的行是我在原始帖子中的输入本身的行。创建和设置 oReferer 的代码似乎不是问题,但在将其设置为值时有些不匹配。几乎就像 oReferer 不被视为一个字符串。最后,执行 Request.Cookies("OrigReferer") & "**" 的想法仍然会给我输入一个空值。这个问题对我来说真的很奇怪。

标签: data-binding forms binding asp-classic


【解决方案1】:
<%
    dim oReferer
    dim origReferer, arrRefer1, arrRefer2
    origReferer = "self"

    if not Request.ServerVariables("HTTP_REFERER") = "" then 
        if not Request.ServerVariables("HTTP_COOKIE") = "" then
            if not len(Request.Cookies("OrigReferer")) > 0 then
                arrRefer1 = split(Request.ServerVariables("HTTP_REFERER"),"//")
                if UBound(arrRefer1) > 0 then
                    arrRefer2 = split(arrRefer1(1), "/")
                    if UBound(arrRefer2) > 0 then
                        origReferer = arrRefer2(0)
                    end if
                end if
                Response.Cookies("OrigReferer") = origReferer
                Response.Cookies("OrigReferer").Expires = DateAdd("d", 120, Date())

                ''// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                ''// The problems is that you are not 
                ''// setting the oReferer variable here
                ''// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            else
                oReferer = Request.Cookies("OrigReferer")
            end if 
        else
            oReferer = "no cookies"
        end if
    else
        oReferer = "self"
    end if

    response.write "----------<br>"
    response.write "oReferer=" + oReferer
 %>

【讨论】:

  • 我添加了一个简单的 oReferer = Request.Cookies("OrigReferer") 就像你建议的那样,我仍然看到相同的行为。隐藏字段根本没有设置。我可以看到 cookie 在应该设置的时候被设置,但是有些东西阻止它进入隐藏字段。有没有使用 代码的替代方法?
  • 我通过使用 找到了该问题的解决方案,并且从现在开始始终将信息发送到 cookie。我能想到的最好的结果是存储在 oReferer 中的值在设置它的代码和获取它的调用之间丢失了。
  • 关键是代码有几种方法可以得出一个空的oReferer或一个空的Request.Cookies("OrigReferer")
  • 我遇到的问题不在于空的 oReferer。事实证明它更简单,而且更烦人。变量 oReferer 是在
  • 如果您在任何sub 之外创建变量,则该变量具有整个页面范围。为确保您只使用已声明的变量,请将 &lt;% Option Explicit %&gt; 放在页面顶部,紧跟在 &lt;%@ Language=VBScript %&gt; 之后
猜你喜欢
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多