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

时间:2011-08-05 21:44:59

标签: c# validation

我想在文本框中设置范围验证器,以防止有人订购的产品多于可用产品。我有可用的数量存储在数据库中,我将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和更高触发它。我猜这与它正在比较字符串的事实有关,但我不知道如何将它改为比较数字。

3 个答案:

答案 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控件的有效属性):

BaseCompareValidator.Type Property

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