Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Validation to validate uniqueness

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)
like image 890
VansFannel Avatar asked Nov 08 '22 21:11

VansFannel


1 Answers

Hi first of all to answer to your question,

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

yes there is way..:)

And Here is the way:

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

By using index you can achieve it, I personally implemented in my project it worked well.

Useful Link:

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

Offical explanation of index can be found here : https://msdn.microsoft.com/en-us/library/jj591583(v=vs.113).aspx

Hope the above information was useful, kindly let me know your thoughts or feedbacks

Thanks

Karthik

like image 80
Karthik Elumalai Avatar answered Nov 14 '22 23:11

Karthik Elumalai