【问题标题】:Validator in DataGrid, using parameters from rowDataGrid 中的验证器,使用行中的参数
【发布时间】:2015-02-12 16:22:40
【问题描述】:

我有一种情况,在数据库中,我有项目列表,其中包含此类信息:

[Item]
* ItemName
* ItemPackagingSize
* AvailableQuantity

用户可以输入他想要获得的物品数量(数量),但数量必须遵循这个条件:

if(quantity % ItemPackagingSize == 0)
    isValid = true;
else
    isValid = false;

我应该使用什么 ASP.NET 验证器来检查这个东西?或者也许还有其他方法可以做到这一点?

例如,对于 AvailableQuantity,我使用这个:

<asp:RangeValidator ID="RangeValidator" ControlToValidate="OrderQuantity" runat="server" Type="Double" MaximumValue='<%# Container.DataItem["LeftQuantity"] %>' ErrorMessage="Quantity entered is higher than available quantity"></asp:RangeValidator>

【问题讨论】:

    标签: c# asp.net datagrid


    【解决方案1】:

    范围验证器只会检查介于两个参数之间的输入 - 低和高。

    您的要求似乎是确保客户只购买整包 - 您可以购买六包,但不能购买单独的瓶子。

    您可以创建一个自定义验证器来访问您编写的代码 - 这可以正常工作,但涉及服务器端验证。这是一个例子:http://asp.net-tutorials.com/validation/custom-validator/

    另一个选项是正则表达式 (RegEx) 验证器 - 使用客户端验证。 RegEx 可以利用模数 (%) 运算符来测试您的条件。但是,您必须为每个因产品而异的“ItemPackagingSize”动态创建单独的 RegEx 验证器。

    最后,另一种选择可能是重新定义您对用户的数量的含义:数量 1 表示 1 个六包。

    【讨论】:

    • 我已经考虑过所有这些解决方案,但似乎最好的方法是使用 CustomValidator,它使用 ClientValidationFunction,它在行中查找隐藏字段,然后进行检查。如果有人对这里感兴趣是ClientValidationFunction:function validatePackage(oSrc, args) { var value = $('input[name$="hf_PackageItemsCount"]', $(oSrc).parent())[0].value; args.IsValid = (Number(args.Value.replace(",", ".")) % Number(value.replace(",", ".")) == 0); }
    猜你喜欢
    • 2010-12-23
    • 2011-04-21
    • 1970-01-01
    • 2019-08-29
    • 2012-12-09
    • 1970-01-01
    • 2010-12-21
    • 2010-10-08
    • 2011-10-10
    相关资源
    最近更新 更多