Validation to validate uniqueness

Viewed 575

I'm developing an ASP.NET MVC 5 application with C# and .NET Framework 4.7.

On my view I have this code:

<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>

I have a button that add new rows to the table with jQuery.

I need to check if ProductCode is unique (all products must have an unique product code). I did it with jQuery using a dictionary equivalent data structure but I'm not sure if I can do it with an ASP.NET validation.

I want to show a message like the message it shows when ProductCode field is empty.

The model I'm using in this view is:

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

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

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

And Products has these validations:

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

Is there a way to add a validation to validate that all Product's codes are unique on client side?

On my database table I have this constraint, but it is on server side:

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