- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我希望有人能提供帮助。我到处都在寻找答案,但找不到任何东西。我无法让我的第一个 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/
我有一个带有 CompareValidator 的页面: 在后面的代码中,我们设置 ValueToCompar
我希望有人能提供帮助。我到处都在寻找答案,但找不到任何东西。我无法让我的第一个 if 语句“触发”。 在我的表单中,我有一个文本框供用户输入数量,当它是带有“箔”和“标准”或“打印”和“迷你”的产品时
我是一名优秀的程序员,十分优秀!