ненавязчивая проверка не срабатывает в поле даты, допускающем значение NULL

У меня есть представление редактирования со списком выбора и парой текстовых полей, которые создаются для полей даты, допускающих значение NULL. Когда дата отсутствует, проверка не происходит - это правильно.

Однако, если я ввожу недопустимую дату, проверка не обнаружит это и перейдет к моему действию. Как я могу принудительно проверить поля даты?

Моя модель:

public class CaseEmployer
{
    public int Id { get; set; }
    public int CaseId { get; set; }
    public Company Company { get; set; }
    [Display(Name = "Start Date")]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode=true)]
    public DateTime? StartDate { get; set; }
    [Display(Name = "End Date")]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? EndDate { get; set; }
    public int? UserId { get; set; }
    public DateTime? TimeStamp { get; set; }

}

Мой взгляд:

@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
    <legend>Employer</legend>
        @Html.HiddenFor(model => model.Id)
        @Html.HiddenFor(model => model.CaseId)

    <div class="editor-label">
        @Html.Label("Company:")
    </div>
    <div class="editor-field">
        <select name="companySelect" id="companySelect">
            @foreach (var company in ViewBag.CompanyOptions)
            {
                    <option value="@company.Key">@company.Value</option>
            }
        </select>

    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.StartDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.StartDate)
        @Html.ValidationMessageFor(model => model.StartDate)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.EndDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.EndDate)
        @Html.ValidationMessageFor(model => model.EndDate)
    </div>

    <p>
        <input type="submit" value="Update" />
        <input type="button" value="Cancel" onclick="javascript:window.close()" />
        <input type="button" value="Delete" onclick="javascript:confirmDeleteCaseEmployer()" />
    </p>
</fieldset>

** Редактировать **

Я добавил «Обязательные» атрибуты в класс, чтобы проверить, сработает ли проверка, если я отправлю форму без StartDate и EndDate, и проверка действительно сработает с этими атрибутами.

Спасибо!


person TheGeekYouNeed    schedule 15.01.2012    source источник
comment
Какие поля не проверяются? Одно из ваших полей DateTime не имеет проверки, а два других имеют обязательную проверку, так почему они вообще могут быть нулевыми?   -  person quentin-starin    schedule 15.01.2012
comment
@qes, разве они не должны иметь значение NULL, чтобы отображать текстовые поля с пустыми значениями при первом отображении формы?   -  person danludwig    schedule 15.01.2012
comment
Извините, Required были там для тестирования.   -  person TheGeekYouNeed    schedule 16.01.2012


Ответы (1)


Если вы намерены проверять поля даты и времени, вы, вероятно, захотите изучить атрибут проверки регулярного выражения, чтобы помочь ненавязчивому JavaScript на стороне клиента проверить ожидаемый ввод. Ваши атрибуты формата отображения не повлияют на проверку, а только на то, как отображается значение даты и времени.

С вашим кодом, как показано, в основном не происходит проверки, пока форма не отправит сообщение в действие контроллера. Поскольку updatemodel не может преобразовать некоторые из ваших входных данных в значение даты и времени, вы получаете ошибки преобразования формата модели.

person enorl76    schedule 16.01.2012