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
Gracias por ser paciente para leer todo esto, y por las respuestas