Search code examples
razorasp.net-core-mvcmodel-bindingunobtrusive-validation

How can I use I create a DropDownList with custom data attributes on the options, using MVC, and retain the validation?


Using unobtrusive validation, if I simply do @Html.DropDownListFor (or any other xxxFor) then MVC pops in the appropriate client side validation attributes from my model.

However I need a solution where each option has a specific data-custom-attribute adding to it. So to do this, I use a foreach and just manually render the HTML.

By doing so though, I lose the validation. I am not sure if it's possible to add this myself, without hard-coding it, such that it's still based off the data annotations on the model.

Ultimately, I want a dropdownlist bound to my ViewBag.ListOfItems using key/value as the value/text and a data-custom-attribute containing another value taken from the ListOfItems, with whatever model validation is on the model (in this instance, [Required], but I will re-use this code and there may be other attributes).

Is this possible?


Solution

  • Keep the foreach, but use the SelectTagHelper:

    <select asp-for="Foo">
        @foreach (var option in Model.FooOptions)
        {
            <option value="@option.Value" data-whatever="blah">@option.Text</option>
        }
    </select>