如何以编程方式设置范围验证器上的最大值



我想在一个文本框上设置一个范围验证器,以防止有人订购超过可用数量的产品。我在数据库中存储了可用的数量,并且将range 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及以上会。我猜这与它比较字符串的事实有关,但我不确定如何将其更改为比较数字。

默认范围验证器类型为字符串,将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

是否尝试将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在标题扔你,类型是RangeValidator控件的有效属性):

BaseCompareValidator。类型属性

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");
}

最新更新