gpt4 book ai didi

c# - ASP.NET 问题设置 CompareValidator.ValueToCompare

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:51 24 4
gpt4 key购买 nike

我希望有人能提供帮助。我到处都在寻找答案,但找不到任何东西。我无法让我的第一个 if 语句“触发”。

在我的表单中,我有一个文本框供用户输入数量,当它是带有“箔”和“标准”或“打印”和“迷你”的产品时,我试图将其验证为 150它的子类别名称。如果它没有这 4 个词中的任何一个,那么最小数量应该默认为 250。这是我的“数量”文本框代码:

<asp:TextBox ID="txtQuantity" runat="server" Text="Quantity" Width="300" />
<asp:RequiredFieldValidator ID="rfvQuantity" runat="server" ControlToValidate="txtQuantity" ErrorMessage="Quantity Required" Display="None" ValidationGroup="Quote" />
<asp:CompareValidator ID="cmvQuantity" runat="server" ControlToValidate="txtQuantity" ErrorMessage="Insufficient Quantity" Display="None" ValueToCompare="250" Operator="GreaterThanEqual" Type="Integer" ValidationGroup="Quote" />
<asp:CompareValidator ID="cmvQuantityText" runat="server" ControlToValidate="txtQuantity" ErrorMessage="Quantity Required" Display="None" Operator="DataTypeCheck" Type="Integer" ValidationGroup="Quote" />

下面是代码:

protected void rptProduct_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{

((CompareValidator)e.Item.FindControl("cmvQuantity")).ValueToCompare = ((Product)e.Item.DataItem).SubCategory.Category.Name.Contains("Foil") && ((Product)e.Item.DataItem).SubCategory.Name.Contains("Standard") ? "150" : "250";
((CompareValidator)e.Item.FindControl("cmvQuantity")).ValueToCompare = ((Product)e.Item.DataItem).SubCategory.Category.Name.Contains("Printed") && ((Product)e.Item.DataItem).SubCategory.Name.Contains("Mini") ? "150" : "250";
}
}

出于某种原因,它似乎只对最后一个条件有效,而不是第一个条件,即使我切换条件语句的位置,它仍然只对最后一个语句有效,而不是第一个。
所以我认为这是一个语义问题?任何帮助将不胜感激!!谢谢!

最佳答案

我看到的问题是您为同一个 Compare Validator 控件 cmvQuantity 设置了 ValueToCompare 两次,这是完全错误的方法,因为最后执行的最后一个将是最终的更改属性的值,因此下面是适用于您的情况的实现。

protected void rptProduct_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Product productInstance = e.Item.DataItem as Product; //safely type cast
CompareValidator cmvQuantity = e.Item.FindControl("cmvQuantity") as CompareValidator; //safely type cast
if (cmvQuantity != null && productInstance != null) //check if type cast suceeded and/or control was found.
{
if((productInstance.SubCategory.Category.Name.Contains("Foil") && productInstance.SubCategory.Name.Contains("Standard")) ||
(productInstance.SubCategory.Category.Name.Contains("Printed") && productInstance.SubCategory.Name.Contains("Mini"))
{
cmvQuantity.ValueToCompare = "150";
}
else
{
cmvQuantity.ValueToCompare = "250";
}
}
}
}

一些可能对你有帮助的要点

  • 尝试从页面中查找对象并将其放入变量中,而不是在每个新行中查找。例如,而不是像下面这样:

    public void Method()
    {
    ((CompareValidator)e.Item.FindControl("cmvQuantity")).ValueToCompare = "Test value";
    ((CompareValidator)e.Item.FindControl("cmvQuantity")).ControlToValidate = "txtControlId";
    }

    将其实现为:

    public void Method()
    {
    CompareValidator cmvQuantity = e.Item.FindControl("cmvQuantity") as CompareValidator;
    if (cmvQuantity != null)
    {
    cmvQuantity.ValueToCompare = "Test value";
    cmvQuantity.ControlToValidate = "txtControlId";
    }
    }
  • 不要为相同的代码块在 If-Else-if 中添加每个新的。例如

    if (test == 1)
    {
    txtControl.Text = "150";
    }
    else if (test == 2)
    {
    txtControl.Text = "150";
    }
    else
    {
    txtControl.Text = "250";
    }

    将其实现为:

    if (test == 1 || test == 2)
    {
    txtControl.Text = "150";
    }
    else
    {
    txtControl.Text = "250";
    }

关于c# - ASP.NET 问题设置 CompareValidator.ValueToCompare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12206912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com