0

我的网站是用 ASP.NET 2.0 和 C# 构建的。我有一个名为 tbCode 的文本框,用户可以在其中输入代码。我正在尝试通过单击按钮检查输入的值与后面代码中的多个值。

这是我到目前为止的标记。

 protected void btUpdate_Click(object sender, EventArgs e)
{


    if ((this.tbcode.Text.Trim().ToUpper() != "AB12") ||(this.tbcode.Text.Trim().ToUpper() != "DE14") || (this.tbcode.Text.Trim().ToUpper() != "XW16"))
    {
        lbmessage.Text = "Invalid Promo code. Please enter again";
    }
    else if ((this.tbcode.Text.Trim().ToUpper() == "AB12") || (this.tbcode.Text.Trim().ToUpper() == "DE14") || (this.tbcode.Text.Trim().ToUpper() == "XW16"))
    {
        Order.Shipping.Cost = 0;
        this.lShipping.Text = Order.Shipping.Cost.ToString("c");
        this.lSubtotal.Text = Order.Subtotal.ToString("c");
        this.lTotal.Text = Order.TotalCost.ToString("c");
        Order.PomoCode = this.tbcode.Text.Trim().ToUpper();
        lbmessage.Text = "Promo Code Applied.";
    }
    else
    {
        this.lShipping.Text = Order.Shipping.Cost.ToString("c");
        this.lSubtotal.Text = Order.Subtotal.ToString("c");
        this.lTotal.Text = Order.TotalCost.ToString("c");

    }

}

当我按下按钮时,它总是说无效代码。不知道我在哪里犯了错误。如果我只检查一个值而不是 3,它会完美运行。

感谢并感谢

4

4 回答 4

2

这可能是您想要做的:

protected void btUpdate_Click(object sender, EventArgs e)
{
    string tbcodeValue = this.tbcode.Text.Trim().ToUpper();

    string[] validCodes = new string[] { "AB12", "DE14", "XW16" };
    if (!validCodes.Contains(tbcodeValue))
    {
        lbmessage.Text = "Invalid Promo code. Please enter again";
    }
    else 
    {
        Order.Shipping.Cost = 0;
        this.lShipping.Text = Order.Shipping.Cost.ToString("c");
        this.lSubtotal.Text = Order.Subtotal.ToString("c");
        this.lTotal.Text = Order.TotalCost.ToString("c");
        Order.PomoCode = tbcodeValue;
        lbmessage.Text = "Promo Code Applied.";
    }
}

首先,你到处打电话this.tbcode.Text.Trim().ToUpper()。这确实使您的代码变得混乱并且难以阅读。将其分配给变量不仅使代码更清晰,而且避免了一遍又一遍地执行所有这些字符串操作函数。

接下来,您的意图似乎是说,“如果文本框值不是这些值中的任何一个,则运行一些代码说它是无效的。最简单的方法是将所有有效值放入一些容器中排序并查看它是否包含您感兴趣的值。您的下一个代码块基本上是“如果它是有效值之一”。所以如果它确实包含字符串,那么它是有效的。至于你的 else ,我不知道它的意图是什么。要么字符串无效,要么有效。我没有看到任何第三种情况,所以我只是删除了它。

于 2012-10-16T19:55:29.127 回答
1

您需要在第一个 if 语句中将 || 更改为 &&。否则你总是会落入那个街区。

于 2012-10-16T19:37:05.393 回答
1

试试这个:

 if ((this.tbcode.Text.Trim().ToUpper() != "AB12") && (this.tbcode.Text.Trim().ToUpper() != "DE14") && (this.tbcode.Text.Trim().ToUpper() != "XW16"))
    {
        lbmessage.Text = "Invalid Promo code. Please enter again";
    }
    else if ((this.tbcode.Text.Trim().ToUpper() == "AB12") || (this.tbcode.Text.Trim().ToUpper() == "DE14") || (this.tbcode.Text.Trim().ToUpper() == "XW16"))
    {
        Order.Shipping.Cost = 0;
        this.lShipping.Text = Order.Shipping.Cost.ToString("c");
        this.lSubtotal.Text = Order.Subtotal.ToString("c");
        this.lTotal.Text = Order.TotalCost.ToString("c");
        Order.PomoCode = this.tbcode.Text.Trim().ToUpper();
        lbmessage.Text = "Promo Code Applied.";
    }
    else
    {
        this.lShipping.Text = Order.Shipping.Cost.ToString("c");
        this.lSubtotal.Text = Order.Subtotal.ToString("c");
        this.lTotal.Text = Order.TotalCost.ToString("c");

    }
于 2012-10-16T19:39:12.700 回答
0

你也可以使用 switch;case; 堵塞。

String testtext = this.tbcode.Text.Trim().ToUpper();

switch(testtext)
{
    case "AB12":
        // Do stuff for this case
        break;
    case "Text2":
        // Do stuff for this case
        break;
    default:
        // anything that fails all above tests goes here
        break;
}

只需确保在每种情况下都中断、返回或继续,否则您将收到编译错误。默认值也需要排在最后。

于 2012-10-16T20:32:26.673 回答