验证以验证唯一性

时间:2017-05-25 07:05:11

标签: c# jquery asp.net asp.net-mvc

我正在使用C#和.NET Framework 4.7开发ASP.NET MVC 5应用程序。

在我看来,我有这段代码:

<tbody>
    @for (int index = 0; index < Model.Products.Count; index++)
    {
        <tr>
            <td>
                <div class="group">
                    @Html.TextBoxFor(m => m.Products[index].ProductCode)
                    @Html.HiddenFor(m => m.Products[index].Law)
                    <div class="mensajeError">@Html.ValidationMessageFor(m => m.Products[index].ProductCode)</div>
                </div>
            </td>
            <td>
                <div class="group">
                    @Html.TextBoxFor(m => m.Products[index].Description, new { @class = "productClass", @style = "max-width:none" })<br />
                    <div class="mensajeError">@Html.ValidationMessageFor(m => m.Products[index].Description)</div>
                </div>
            </td>
            <td>
                <div class="group">
                    @Html.TextBoxFor(m => m.Products[index].Name, new { @class = "productClass" })<br />
                    <div class="mensajeError">@Html.ValidationMessageFor(m => m.Products[index].Name)</div>
                </div>
            </td>
            <td>
                <div class="group">
                    @Html.TextBoxFor(m => m.Products[index].Comment, new { @class = "productClass" })<br />
                    <div class="mensajeError">@Html.ValidationMessageFor(m => m.Products[index].Comment)</div>
                </div>
            </td>
        </tr>
    }
</tbody>

我有一个按钮,可以使用jQuery向表中添加新行。

我需要检查ProductCode是否唯一(所有产品必须具有唯一的产品代码)。我使用字典等效数据结构使用jQuery做到了,但我不确定我是否可以使用ASP.NET验证来完成它。

我希望在ProductCode字段为空时显示消息,例如它显示的消息。

我在这个视图中使用的模型是:

public class CreateProductViewModel
{
    public byte LawId { get; set; }

    public IList<Models.Products> Products { get; set; }

    public CreateProductViewModel()
    {
        Products = new List<Models.Products>();
    }
}

Products有以下验证:

public class Products
{
    public int Id { get; set; }

    [Required(ErrorMessageResourceType = typeof(Resources.Resources),
            ErrorMessageResourceName = "ProductCodeRequired")]
    [StringLength(20, ErrorMessageResourceType = typeof(Resources.Resources),
                    ErrorMessageResourceName = "ProductCodeLong")]
    public string ProductCode { get; set; }

    [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resources),
                    ErrorMessageResourceName = "ProductDescriptionLong")]
    public string Description { get; set; }

    public byte Law { get; set; }

    [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resources),
                    ErrorMessageResourceName = "ProductNameLong")]
    public string Name { get; set; }

    [StringLength(100, ErrorMessageResourceType = typeof(Resources.Resources),
                    ErrorMessageResourceName = "ProductCommentLong")]
    public string Comment { get; set; }
}

有没有办法添加验证来验证所有产品的代码在客户端都是唯一的?

在我的数据库表上,我有这个约束,但它在服务器端:

ALTER TABLE [dbo].[Product]
    ADD CONSTRAINT [UNQ_PRODUCTCODE_PRODUCT]
    UNIQUE (ProductCode)

1 个答案:

答案 0 :(得分:1)

首先,您好回答您的问题,

有没有办法添加验证来验证所有产品的代码都是唯一的?

是的,有办法...... :)

以下是:

 [Index("Ix_ProductCode",Order =1,IsUnique =true)]
        public string ProductCode { get; set; }

通过使用索引,您可以实现它,我个人在我的项目中实现它运行良好。

有用的链接:

https://www.codeproject.com/articles/1130113/best-ways-of-implementing-uniqueness-or-unique-key

可在此处找到索引的官方说明https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx

希望以上信息有用,请告诉我您的想法或反馈

由于

KARTHIK