ненавязчивая проверка, не стреляющая в обнуляемое поле даты - PullRequest
0 голосов
/ 15 января 2012

У меня есть представление редактирования, со списком выбора и парой текстовых полей, сгенерированных для полей даты со значением 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; }

}

My View:

@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>

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

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

Спасибо!

1 Ответ

0 голосов
/ 16 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...