Я новичок в ASP.Net MVC 3, столкнулся с некоторыми проблемами при попытке реализовать ненавязчивую проверку на стороне клиента для шаблона редактора, который я создал для отображения даты в индивидуальном порядке.
Пользовательский интерфейс
Мне нужно отображать дату в формате трех texbox UI как
Я установил EditorTemplate для отображения даты в трех частях как
@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>
Модель
] Мне нужно привязать поле «Дата рождения», которое является свойством подобъекта моей модели, к этому свойству, в этой структуре
MyModel
--> MySubModel
--> DateOfBirth
public class MySubModel
{
...
[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
[DateTimeClientValidation()]
public DateTime DateofBirth { get; set; }
...
}
Проверка на стороне клиента
Я установил настраиваемый атрибут проверки, который реализует IClientValidatable как
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;
}
...
}
. Я пытаюсь передать имена элементов текстовых полей дня, месяца и года здесь в элементы проверки на стороне клиента,так что позже я напишу метод проверки jquery на стороне клиента и адаптер, который будет использовать эти элементы и выполнять проверку на стороне клиента.
View
Теперь, чтобы использовать этот шаблон редактора, я вставил View следующие строки
@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>
...
Добавлены все соответствующие файлы проверки jquery в представление как ссылки
Вопросы
@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>
...
Добавил все соответствующие файлы проверки jquery в представление в виде ссылок
Вопросы
@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>
...
Добавил все соответствующие файлы проверки jquery в представление в виде ссылок
Вопросы
Спасибо за терпение, чтобы прочитать все это, и для ответов