1

我在表单中设置了以下代码,并且收到“预期语句”错误。我第一次这样做并认为我的语法是正确的,我错过了什么?

            <%
            If Trim(oQuote("shipmeth"))="FREIGHT" Then 
                Response.Write "Freight" 
            ElseIf Trim(oQuote("shipmeth"))="THRSHLD" Then 
                Response.Write "Threshold"
            End If
            %>
4

4 回答 4

3

当使用嵌套的 2-way 条件时,每个条件必须由它自己的End If:

If condition_A Then
  action_A
Else
  If condition_B Then
    action_B
  Else
    If condition_C Then
      action_C
    Else
      action_D
    End If 'condition_C
  End If 'condition_B
End If 'condition_A

只有一个 n-way 条件可以用一个单一的来关闭End If(因为它只是一个单一的条件):

If condition_A Then
  action_A
ElseIf condition_B Then
  action_B
ElseIf condition_C Then
  action_C
Else
  action_D
End If

但是,这种 n 向条件仅在您检查不同条件时才有意义,例如

If IsEmpty(a) Then
  ...
ElseIf b > 23 Then
  ...

在检查相同变量的不同值时,最好使用Alex K.建议的Select语句:

Select Case foo
  Case "a"
    'handle foo="a"
  Case "b", "d"
    'handle foo="b" as well as foo="d"
  Case Else
    'handle non-matches
End Select
于 2013-06-05T13:45:28.633 回答
2

后面的第一个语句If必须在新行上;

If Trim(oQuote("shipmeth"))="FREIGHT" Then 
  Response.Write "Freight" 

以下条件可以在同一行,但必须使用 ElseIf

ElseIf Trim(oQuote("shipmeth"))="THRSHLD" Then Response.Write "Threshold"
ElseIf ...

我会建议一个更具可读性的案例;

select case Trim(oQuote("shipmeth"))
    Case "THRSHLD"
        Response.Write "Threshold"
    Case "PREMTHRHLD"
        Response.Write "Premium Threshold"
    ...
end select

它具有仅执行Trim(oQuote("shipmeth"))一次的额外优势。

于 2013-06-05T13:04:31.120 回答
1

我认为“else if”应该是一个词,比如elseif

于 2013-06-05T12:55:08.153 回答
0

您在这里有很好的答案,我将再添加一个(轻微优化的)替代方案。

strTest   = Trim(oQuote("shipmeth"))
strResult = "Unexpected"
If strTest ="FREIGHT" Then strResult = "Freight"
If strTest ="THRSHLD" Then strResult = "Threshold"
Response.Write strResult

编辑

只是为了澄清我的想法,我讨厌嵌套If..Then,不幸GoTo Label的是在 VBScript 中没有,因此可以使用函数优化上述双重比较。

strResult = "Unexpected"
MyResponse Trim(...), strResult
Response.Write strResult

Sub MyResponse(strIn, strOut)
    If strIn = "FREIGHT" Then
        strOut = "Freight" : Exit Sub
    End If
    If strIn = "THRSHLD" Then strOut = "Threshold"
End Sub
于 2013-06-05T14:51:09.970 回答