ASP.Net MVC 3: validación discreta del lado del cliente para las plantillas de editor

Soy nuevo en ASP.Net MVC 3, enfrento algunos problemas al intentar implementar una validación discreta del lado del cliente para una plantilla de editor que he creado para mostrar la fecha de forma personalizada.

UI
Necesito mostrar la fecha en unthree texbox UI formato como


He puesto una EditorTemplate para mostrar la fecha en tres partes como

@model DateTime?

<table class="datetime">
<tr>
    <td>@Html.TextBox("Day", (Model.HasValue ? Model.Value.ToString("dd") : string.Empty)) </td>
    <td class="separator">/</td>
    <td>@Html.TextBox("Month", (Model.HasValue ? Model.Value.ToString("MM") : string.Empty))</td>
    <td class="separator">/</td>
    <td>@Html.TextBox("Year", (Model.HasValue ? Model.Value.ToString("yyyy") : string.Empty))</td>
</tr>
<tr>
    <td class="label">dd</td>
    <td/>
    <td class="label">mm</td>
    <td/>
    <td class="label">yyyy</td>
</tr>
</table>

Model
engo que vincular un campo de fecha de nacimiento que es una propiedad en un subobject de mi modelo para esta propiedad, en esta estructura

MyModel
    --> MySubModel
          --> DateOfBirth

public class MySubModel
{
    ...

    [DataType(DataType.Date)]
    [Display(Name = "Date of birth")]
    [DateTimeClientValidation()]
    public DateTime DateofBirth { get; set; }

    ...
}

Validación de Clientes

He puesto un atributo de validación personalizado que implementa IClientValidatable como

public class DateTimeClientValidationAttribute : ValidationAttribute, IClientValidatable
{
    ...

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        List<ModelClientValidationRule> clientRules = new List<ModelClientValidationRule>();

        //Combined date should be valid
        ModelClientValidationRule validDateRule = new ModelClientValidationRule
        {
            ErrorMessage = "Please enter a valid date.",
            ValidationType = "validdate"
        };
        validDateRule.ValidationParameters.Add("dayelement", metadata.PropertyName + ".Day");
        validDateRule.ValidationParameters.Add("monthelement", metadata.PropertyName + ".Month");
        validDateRule.ValidationParameters.Add("yearelement", metadata.PropertyName + ".Year");
        clientRules.Add(validDateRule);

        return clientRules;
    }
    ...
}

Estoy tratando de emitir los nombres de elementos de cuadros de texto de Día, Mes y Año aquí para los elementos de validación del lado del cliente, de modo que luego escriba un método y adaptador de validación jquery del lado del cliente que consumiría esos elementos y haría la validación en el lado del cliente .

Ve
Ahora, para usar esta plantilla de editor, puse enVe las siguientes líneas

@model MyModel
...
<tr>
    <td class="editor-label">
        @Html.LabelFor(m => m.MySubModel.DateofBirth)
    </td>
    <td class="editor-field">
        @Html.EditorFor(m => m.MySubModel.DateofBirth)
        @Html.ValidationMessageFor(m => m.MySubModel.DateofBirth)
    </td>
</tr>
...

Se agregaron todos los archivos de validación jquery relevantes en la vista como referencias

Preguntas

Esto no está emitiendo los atributos de validación de JavaScript discretos en el html, aunque he implementado IClientValidatable. Para fines de prueba cuando pongo el mismo atributo DateTimeClientValidation) en otra propiedad en el modelo que no estaba usando esta plantilla de editor, luego emitió esos atributos de validación, no lo está emitiendo solo para esta plantilla de editor. ¿Dónde podría haber salido mal?Regarding Validation Message span para la plantilla del editor, ¿es correcto que lo coloque en Ver solamente o debería ponerlo directamente en la plantilla del editor @ Html.ValidationMessageFor (m => m.MySubModel.DateofBirth)) En este ejemplo, estoy en lo cierto en el diseño, he puesto en DateTimeClientValidationAttribute, que en realidad es un atributo que puse en el modelo, pero este componente sabe un poco sobre la interfaz de usuario (ya que está tratando de emitir el nombre de los elementos Día, Mes y Año al cliente), esto hace que el Modelo sepa un poco sobre Vista, ¿Estoy rompiendo algún principio de diseño aquí?In DateTimeClientValidationAttribute, Estoy tratando de emitir los nombres de los elementos de día, mes y año para el cliente, de modo que el script del cliente pueda validarlo. Pero desde la propiedad modeloFecha de nacimient está en un subobjeto, el nombre real del elemento en el script es MySubObject.DateOfBirth, lo que hace que el nombre del cuadro de texto Día sea MySubObject.DateofBirth.Day, ¿cómo puedo encontrar ese nombre de modelo totalmente calificado en GetClientValidationRules método, ¿para poder emitir el nombre al cliente?

Gracias por ser paciente para leer todo esto, y por las respuestas

Respuestas a la pregunta(2)

Su respuesta a la pregunta