xVal和验证多行数据

时间:2009-12-01 18:10:27

标签: c# asp.net-mvc xval

我有一个表名称Discount,它具有以下架构:

PK DiscountID int

FK CustomerID int

金额

名称varchar(50)

所以我显示了与客户相关的所有折扣。每位客户将有3个折扣记录。

当我生成表单时,用于编辑的相关文本框的ID和名称必须是唯一的才能正确处理。

实施例

当我尝试使用xVal进行验证时,由于我的字段名称与架构名称“Amount_1”而不是“Amount”不匹配,因此它不会验证该字段。

我怎样才能让它发挥作用?

我无法将所有3个折扣合并为唯一客户的一条记录,因为我遗漏了一些其他字段以简化示例。我需要为3行中的每位客户提供3折优惠。

以下是一些代码:

<form method="post" action="ProcessUpdate">

<table>

<tr> <td> Discount 1 </td> <td> <%= Html.TextBox("Amount_1") %></td></tr> 
<tr> <td> Discount 2 </td> <td> <%= Html.TextBox("Amount_2") %></td></tr>
<tr> <td> Discount 3 </td> <td> <%= Html.TextBox("Amount_3") %></td></tr>

<tr> <td> <input type="submit" value="submit"/> </td> </tr>

</table> 
</form> 

<%= Html.ClientSideValidation<Discount>() %>

这是我的元数据

[MetadataType(typeof(DiscountMetaData))]
    public partial class Discount
    {
        public class DiscountMetaData
        {
            [Required(ErrorMessage = " [Required] ")]
            public string Amount { get; set; }
        }            
    } 

有关如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:3)

我玩了一些前缀,这就是这样做的方法:

首先,您必须将文本框命名为具有不同的前缀,但具有相同的属性名称“Amount”,然后通过为每个前缀调用Html.ClientSideValidation三次将jquery验证器附加到每个字段。

<form method="post" action="ProcessUpdate">

<table>

<tr> <td> Discount 1 </td> <td> <%= Html.TextBox("discount1.Amount") %></td></tr> 
<tr> <td> Discount 2 </td> <td> <%= Html.TextBox("discount2.Amount") %></td></tr>
<tr> <td> Discount 3 </td> <td> <%= Html.TextBox("discount3.Amount") %></td></tr>

<tr> <td> <input type="submit" value="submit"/> </td> </tr>

</table> 
</form> 

<%= Html.ClientSideValidation<Discount>("discount1") %>
<%= Html.ClientSideValidation<Discount>("discount2") %>
<%= Html.ClientSideValidation<Discount>("discount3") %>

希望这有帮助