Agrupar mensagens de validação para várias propriedades juntas em uma mensagem asp.net mvc
Eu tenho um modelo de exibição que tem propriedades ano / mês / dia para a data de nascimento de alguém. Todos esses campos são obrigatórios. No momento, se alguém não digitar nada para a data de nascimento, receberá 3 mensagens de erro separadas.
O que eu quero fazer é de alguma forma agrupar essas mensagens de erro em uma mensagem que diz apenas "Data de nascimento é necessária". Portanto, se 1 ou mais desses campos estiverem em branco, eles sempre obterão apenas a 1 mensagem de validação.
Eu preciso disso para trabalhar na validação do lado do cliente via jquery validar e validar discreto. Eu sei que isso é possível com o plugin validar jquery, olhando para estequestão. Mas eu não sei como conseguir isso com asp.net mvc usando atributos de validação no meu modelo e validação discreta. Espero que existam alguns recursos para agrupar propriedades para fins de validação, mas, se não, isso pode ser feito com um atributo de validação personalizado?
Aqui está o que meu modelo e visão existentes parecem:
O modelo:
public class MyModel {
[Required(ErrorMessage = "Year is required")]
public int Year { get; set; }
[Required(ErrorMessage = "Month is required")]
public int Month { get; set; }
[Required(ErrorMessage = "Day is required")]
public int Day { get; set; }
}
A vista:
<div>
<label>Date of birth: <span style="color:red;">*</span></label>
<div>@Html.DropDownListFor(m => m.Year, ApplicationModel.GetSelectListForDateRange(DateTime.Today.Year - 16, DateTime.Today.Year - 10), "", new{data_description="birthDate"})@Html.LabelFor(m => m.StudentBirthYear)</div>
<div>@Html.DropDownListFor(m => m.Month, ApplicationModel.GetSelectListForDateRange(1, 12, true), "", new{data_description="birthDate"})@Html.LabelFor(m => m.StudentBirthMonth)</div>
<div>@Html.DropDownListFor(m => m.Day, ApplicationModel.GetSelectListForDateRange(1, 31), "", new{data_description="birthDate"})@Html.LabelFor(m => m.StudentBirthDay)</div>
</div>
<div class="error-container">@Html.ValidationMessageFor(m => m.Year)</div>
<div class="error-container">@Html.ValidationMessageFor(m => m.Month)</div>
<div class="error-container">@Html.ValidationMessageFor(m => m.Day)</div>