我想在文本框中设置范围验证器,以防止有人订购的产品多于可用产品。我有可用的数量存储在数据库中,我将Ranged Validator的最大值属性数据绑定到数据库中的字段。
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="tbQuantity" Display="Dynamic" ErrorMessage = "Can't Order More Than Quantity."
ForeColor="Red" MaximumValue='<%# Eval("Quantity") %>' MinimumValue="0"></asp:RangeValidator>
然而,当我调试程序时,我得到了一些意想不到的结果。
数量是17。 并且1不会触发错误消息,但2-9会触发,而10-17不会触发它,但是18和更高触发它。我猜这与它正在比较字符串的事实有关,但我不知道如何将它改为比较数字。
答案 0 :(得分:5)
默认范围验证器类型为字符串,将Type
属性更改为Integer
<asp:RangeValidator
ID="RangeValidator1" runat="server"
ControlToValidate="tbQuantity"
Display="Dynamic"
ErrorMessage="Can't Order More Than Quantity."
ForeColor="Red"
MaximumValue='<%# Eval("Quantity") %>'
MinimumValue="0"
Type="Integer" /> // <-- add type property of integer
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basecomparevalidator.type.aspx
答案 1 :(得分:3)
您是否尝试过将type属性设置为整数?
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="tbQuantity" Display="Dynamic"
ErrorMessage="Can't Order More Than Quantity."
ForeColor="Red" MaximumValue='<%# Eval("Quantity") %>'
MinimumValue="0" Type="Integer">
</asp:RangeValidator>
可以在此处找到更多信息(不要让标题中的标题BaseCompareValidator抛出你,Type是RangeValidator
控件的有效属性):
答案 2 :(得分:0)
protected void RangeValidator5_Init(object sender, EventArgs e)
{
((RangeValidator)sender).MaximumValue = DateTime.Today.ToString("yyyy/MM/dd");
((RangeValidator)sender).MinimumValue = DateTime.Today.AddYears(-100).ToString("yyyy/MM/dd");
}